为什么这个awk脚本也打印原始文件?
我有以下脚本: 归属2.awk为什么这个awk脚本也打印原始文件?,awk,Awk,我有以下脚本: 归属2.awk #!/usr/bin/awk -f BEGIN {FS=":"} a[$1]=a[$1] ";" $2 " : " $3 END{ for (x in a) print x,a[x]} 当我让它运行时,它还会打印原始的输入文件。为什么? 当我制作这样的bash脚本时,它工作得很好: 合并 #!/bin/bash awk -F' *: *' '{a[$1]=a[$1] (a[$1]?" \\ " :" ; ") $2 ":" $3} END {f
#!/usr/bin/awk -f
BEGIN {FS=":"}
a[$1]=a[$1] ";" $2 " : " $3
END{
for (x in a) print x,a[x]}
当我让它运行时,它还会打印原始的输入文件。为什么?
当我制作这样的bash脚本时,它工作得很好:
合并
#!/bin/bash
awk -F' *: *' '{a[$1]=a[$1] (a[$1]?" \\ " :" ; ") $2 ":" $3} END {for (x in a) print x,a[x]}' $1
输入:
Affe : 3 : test
Affe : 5 : test2
Money : 9 : test3
产出:
$ ./merge t.txt
Money ; 9:test3
Affe ; 3:test \ 5:test2
$ ./ascript2.awk t.txt
Affe : 3 : test
Affe : 5 : test2
Money : 9 : test3
Money ; 9 : test3
Affe ; 3 : test; 5 : test2
在
ascript2.awk
中,a[$1]=a[$1];“$2”:“$3
应该用大括号括起来,否则它将被解释为不带操作的条件,如果且仅满足该条件,则任何不带操作的条件都将打印该行。(见:)
因此,您的脚本应该如下所示:
#!/usr/bin/awk -f
BEGIN { FS=":" }
{ a[$1] = a[$1] ";" $2 " : " $3 }
END { for (x in a) print x, a[x] }
在
ascript2.awk
中,a[$1]=a[$1];“$2”:“$3
应该用大括号括起来,否则它将被解释为不带操作的条件,如果且仅满足该条件,则任何不带操作的条件都将打印该行。(见:)
因此,您的脚本应该如下所示:
#!/usr/bin/awk -f
BEGIN { FS=":" }
{ a[$1] = a[$1] ";" $2 " : " $3 }
END { for (x in a) print x, a[x] }