awkでフィルタを使用して同じ出力ファイルに出力行数を追加できますか?

awkでフィルタを使用して同じ出力ファイルに出力行数を追加できますか?

内部ファイルがあります

11111
444
989
5512
121318

だから、次のようなoutfileを生成するawkコマンドを配置したいと思います。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

以前に一致したアイテムの数が不明であることを考えると、その後に一致アイテム自体を印刷するには、そのアイテムを1ENDに保存する必要があります。たとえば、次のようになります。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

おすすめ記事