将字符串附加到awk中的数组元素

时间:2017-08-02 14:14:50

标签: arrays awk

给出以下输入

line1
line2
line3

是否可以将它们全部附加到单个数组元素中,然后将它们输出为

line1
line2
line3

只有一个打印声明?半伪代码:awk '{[append $0 to a[test]}; END {print a[test]}' file1

更复杂但更实际的示例问题是两个文件,文件1是:

line1
line2
line3

和file2是:

linea
lineb
linec

我将如何生成这样的输出:

linea
line1
line2
line3
lineb
line1
line2
line3
linec
line1
line2
line3

我认为这需要一个数组,这正是我原来问题的重点。

一些测试,例如[test] + = $ 0和[test] = a [test] + $ 0,可以预见失败。

2 个答案:

答案 0 :(得分:1)

像这样:

$ 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

答案 1 :(得分:1)

这样做你想要的:

awk 'NR==FNR{a=$0;next}{print;printf "%s", a}'  RS="\0" 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="\0" f1 RS="\n" f2
linea
line1
line2
line3
lineb
line1
line2
line3
linec
line1
line2
line3