为什么这个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

我有以下脚本:

归属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 {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] }