列数に基づいてファイルを分割する方法は?

列数に基づいてファイルを分割する方法は?

数値データを含むファイルがあります。各行には異なる数の列があります。行の列数に応じて、ファイルを複数のファイルに分割したいと思います。各行には1〜10個の列を含めることができます。

以下は入力例です。

file.txt
23 53;
34;
31 45 67;
46 78 95;
34 17;
19;
37 65 83;

目標出力

file_1column.txt
34;
19;

file_2column.txt
23 53;
34 17;

file_3column.txt
31 45 67;
46 78 95;
37 65 83;

答え1

"file_" andawkを使用して、固定文字列 "column.txt"を各入力レコードまたは行のフィールドまたは列の数を含む内部変数に関連付けて、目的のファイル名をNF作成します。

awk '{print > "file_" NF "column.txt"}' file.txt

結果:

$ head file_?column.txt
==> file_1column.txt <==
34;
19;

==> file_2column.txt <==
23 53;
34 17;

==> file_3column.txt <==
31 45 67;
46 78 95;
37 65 83;

答え2

次のコマンドを使用することもできます。

注文する

split -l 3 file.txt

xaa、xab、xccという3つのファイルに分けられます。これで、xaa==: file_xaaなどに名前を変更します。

ls -ltr xa*| awk '{print "mv" " " $NF " " "file_"$NF}'| sh


n@praveen:~$ cat file_xaa

23 53;
34;
praveen@praveen:~$ cat file_xab 
31 45 67;
46 78 95;
34 17;
praveen@praveen:~$ cat file_xac
19;
37 65 83;

関連情報