以下のファイル(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)と同じ値を持ちます。NR
FNR
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 > out
。print $2 > out