不像POSIX FILENAME解決方案那麼優雅,但對於那些缺少太多特性的塵土飛揚的舊awk
很方便。您可以在一對夫婦的方式將其發送到awk
前操縱數據的複合語句...
選項1
首先,你可以輸出自身的filenumber每個文件之前,你發送到awk
。所以,如果你的文件是這樣的:
文件1
Line 1 of 1
文件2
Line 1 of 2
Line 2 of 2
文件3
Line 1 of 3
Line 2 of 3
Line 3 of 3
你可以這樣做:
{ echo 1; cat file1; echo 2; cat file2; echo 3; cat file3; }
1
Line 1 of 1
2
Line 1 of 2
Line 2 of 2
3
Line 1 of 3
Line 2 of 3
Line 3 of 3
和管道將進入awk
然後每次拿起filenumber字段數爲1
{ echo 1; cat file1; echo 2; cat file2; echo 3; cat file3; } | awk 'NF==1{file=$1;next} {print file,$0}'
1 Line 1 of 1
2 Line 1 of 2
2 Line 2 of 2
3 Line 1 of 3
3 Line 2 of 3
3 Line 3 of 3
選項2
或者,你可以將文件編號編輯到每行的開頭或結尾,以便在awk
之內可以使用$1
,如下所示:
{ sed 's/^/1 /' file1; sed 's/^/2 /' file2; sed 's/^/3 /' file3; }
1 Line 1 of 1
2 Line 1 of 2
2 Line 2 of 2
3 Line 1 of 3
3 Line 2 of 3
3 Line 3 of 3
所以,現在你可以做
{ sed 's/^/1 /' file1; sed 's/^/2 /' file2; sed 's/^/3 /' file3; } | awk '{file=$1; ...}'
我還在爲@ fedorqui的解決方案的投票雖然:-)
'FNR' ==「在當前輸入文件的輸入記錄編號「。 'NR' ==「到目前爲止所看到的輸入記錄總數。」所以'FNR == NR'代表第一個文件,每個文件都不同。你想用你的第三個文件做什麼? –