2013-10-29 32 views
0

我有一个将数据输出到文本文件的程序,但截至目前它只是在文件的末尾连接起来。我想用printf取一些格式化的输出,并告诉sed或awk替换那个.txt中的某一行。用文本文件中的格式化输出替换特定的行

我试过使用几种不同的方法。现在我想以$名字开始与

printf "%-12s%-9s%-9s%-12s%-9s%-14s%-10s\n" "$name" "$quiz" "$hw" "$midterm" "$final"   
        "$numberGrade" "$letterGrade" 

更换我试图用sed -i/^ $名称/ \ C细纹......但我无法找到如果将其设置为变量,则可以保留printf格式。是否有捷径可寻?

+1

可以提供样本数据来工作与? – slayedbylucifer

+0

printf函数(name,quiz,hw,midterm,final,numberGrade,letterGrade)中的变量必须以代码块中指定的printf格式输出。要匹配的模式将是具有匹配的$ name变量的第一行。输出看起来像这样:Jon 89 90 45 32 72.2 C-(除了输出格式将与printf类似,所以,如果一行代码与“Jon”代码匹配,则该代码行将被替换为新数据。 – user2079828

回答

2

你应该给我们一个输入流的例子和预期输出的例子。

现在,研究一些元素:

  • AWK提供printf函数的实现
  • 你可以尝试这样的:

    formatRow=$(printf "%-12s%-9s%-9s%-12s%-9s%-14s%-10s" "$name" "$quiz" "$hw" "$midterm" "$final" "$numberGrade" "$letterGrade") 
    sed -i "s/^$name.*/$formatRow/" filename 
    
+1

我已添加你的'sed'表达式中缺少's'。 – devnull

+0

好的,谢谢。我曾尝试过几个sed命令,并且出于某种原因无法获得一个变量来保存格式,但是这种方法很有效,但它并不能代替整个线,它只取代了与printf匹配的模式.... hrmm – user2079828

+0

@devnull:雅,当然,谢谢!:) –