我有内文件
11111
444
989
5512
121318
所以我想布局一个 awk 命令,该命令会产生如下所示的 outfile:outfile has ${thesemany} matches
在这种情况下outfile
将如下所示:
outfile has 2 matches
11111
121318
我想我必须尝试一个END
块,但这一行应该在开头。所以对BEGIN
&END
块和在哪里插入增量运算符感到困惑。
我的不完整awk-one-liner
awk 'BEGIN {print "outfile has ${thesemany} matches"} {(length($1) >= 5) print $1}' infile > outfile
答案1
鉴于在 之前您无法知道匹配的数量END
,如果您想在那之后打印匹配本身,那么您将需要将它们保存到1,例如END
:
awk '
length($1) >= 5 {matches = matches (matches ? ORS : "") $1; count++}
END {print "outfile has " count+0 " matches"; if(count) print matches}
' infile
如果您不关心输出顺序(或打算对匹配项进行排序),那么您可以将它们保存在数组中而不是连接字符串中。
1我想你可以在外部缓冲匹配,比如awk 'length($1) >= 5 {count++; print $1 | "cat"} END {print "outfile has " count+0 " matches"; close("cat")}' infile
答案2
您可以将所有匹配字段保存到临时数组并在 END 规则中转储数组:
awk 'length($1) >= 5 {a[$1]; count++; } END {print "outfile has", count, "matches"; for (elem in a) {print elem}}' infile