不像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'代表第一个文件,每个文件都不同。你想用你的第三个文件做什么? –