2015-05-04 67 views
0

使用腳本(Mac OSX Yosemite,在終端中工作),在其中分析許多文件並在其中添加腳本輸出的位置文件。將文件名添加到粘貼文本上方的shell腳本中的附加文本文件

gawk -f ./user/filter.dat ./user/outputpre1.out >> ./user/outputpost.out 
gawk -f ./user/filter.dat ./user/outputpre2.out >> ./user/outputpost.out 

對於發現輸出源的解釋非常有用。輸出我現在所擁有的一切只不過是行,像這樣:

ROW1:OUTPUTOUTPUT 
ROW2:OUTPUTOUTPUT 
ROW8:OUTPUTOUTPUT 
ROW10:OUTPUTOUTPUT 

我想要什麼:

**Output from file outputpre1.out 
ROW1:OUTPUTOUTPUT 
ROW2:OUTPUTOUTPUT 

**Output from file outputpre2.out 
ROW8:OUTPUTOUTPUT 
ROW10:OUTPUTOUTPUT 

這是可能通過GAWK?

回答

1

你不顯示filter.dat腳本,但gawk不知道當前輸入文件,它可以納入你的腳本邏輯的名稱(見manual):

FILENAME

當前輸入文件的名稱。如果在命令行中未指定文件,則FILENAME的值爲「 - 」。 但是,FILENAMEBEGIN塊 (除非由getline設置)內部未定義。

如何將被納入取決於filter.dat是如何組織的。該腳本將不得不設置一個變量(這將在重複使用中進行測試),以確保它只打印一次文件名。像這樣的片段:

BEGIN { 
    first = 1 
} 
... (just before printing rows) 
if (first == 1) { 
    printf "\n**Output from file %s\n", FILENAME; 
    first = 0; 
} 
+0

感謝您的回答。 filter.dat很容易組織。 '{如果($ 21> 0.005){} 其他 { 打印$ 0 } }' – Scaevola

+0

現在我設法補充文件名,在 「打印$ 0」 命令後添加。我只是不確定把這個代碼的其餘部分放在這個filter.dat文件中。 – Scaevola