给定以下输入
line1
line2
line3
是否可以将它们全部附加到单个数组元素中,然后将它们输出为
line1
line2
line3
使用单个打印语句?半伪码:awk '{[append $0 to a[test]}; END {print a[test]}' file1
一个更复杂但更实际的示例问题给出两个文件,文件 1 是:
line1
line2
line3
文件2 是:
linea
lineb
linec
我将如何产生这样的输出:
linea
line1
line2
line3
lineb
line1
line2
line3
linec
line1
line2
line3
我假设这将需要一个数组,这强调了我最初的问题。
一些测试,如 a[test]+=$0 和 a[test]=a[test]+$0 可以预见地失败了。
像这样:
$ awk '{
a[1]=a[1] (a[1]==""?"":ORS) $1 # "append them all into a single array element"
}
END {
print a[1] # "output them - - with a single print statement"
}' file
line1
line2
line3
对于后半部分:
$ awk '
NR==FNR{
a[NR]=$1; next
}
{
b[FNR]=$1
}
END {
for(i=1;i<=length(a);i++) {
print a[i]
for(j=1;j<=length(b);j++)
print b[j]
}
}
' file2 file1
linea
line1
line2
line3
lineb
line1
line2
line3
linec
line1
line2
line3
这执行了您想要的操作:
awk 'NR==FNR{a=$0;next}{print;printf "%s", a}' RS=" " f1 RS="n" f2
测试:
kent$ head f1 f2
==> f1 <==
line1
line2
line3
==> f2 <==
linea
lineb
linec
kent$ awk 'NR==FNR{a=$0;next}{print;printf "%s", a}' RS=" " f1 RS="n" f2
linea
line1
line2
line3
lineb
line1
line2
line3
linec
line1
line2
line3