awkで複数の出力のフォーマット出力ファイル名を設定する方法

awkで複数の出力のフォーマット出力ファイル名を設定する方法

以下のファイル(file.csv)があります。

abc 123
abc 001
abc 014
bos 011
bos 034
bos 079
bos 004
...

PS:file.csvの列1には合計27297個の固有の単語があり、file.csvには合計789234行があります。

最初の列に基づいて複数のファイルに分割したいと思います。私はそれを処理するためにawkを使用します。

awk '{x=++i}{print $2 > "HG"x".txt"}' file.csv

しかし、出力名はHG1.txt, HG2.txt,..., HG27297.txt。私が望むのは、出力ファイル名をフォーマットする必要がありますHG000001.txt, HG000002.txt,..., HG027297.txt

ベストアンサー1

{x=++i}2つの変数sumを生成し、x両方ともi組み込み変数(and)と同じ値を持ちます。NRFNR

print $2 > "HG"x".txt"右式の周りに括弧がないため、未定義の動作です>

GNU awkを除くすべてを使用しても出力ファイルを閉じないと、しきい値を超えた後に「オープンファイルが多すぎます」というエラーが発生します。

例に示すように、入力が最初のフィールド値にグループ化されているとします(そうでない場合はsort最初に入力から実行)。

awk '$1!=prev{close(out); out=sprintf("HG%06d.txt",++c); prev=$1} {print > out}' file.csv

コードのように2番目の列だけを印刷するには明らかにprint > outprint $2 > out

おすすめ記事