2013-10-29 40 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:雅,當然,謝謝!:) –