シェルコマンドを使用してファイルを複数のファイルに分割する

シェルコマンドを使用してファイルを複数のファイルに分割する

ファイルを複数のファイルに分割したいです。

以下は私が持っているファイルです。

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

ファイルを以下のように分割したい

ファイル1

sort a # 3|4
sort a # 2|5

ファイル2

sort b # 1|2
sort b # 2|5

ご覧のとおり、2 列目に基づいて分割しました。2 列目にはさまざまな値があるため、面倒な方法でファイルを分割するには時間がかかります。この問題をどのように解決すればよいでしょうか?

答え1

AWK解決:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++$2-配列のインデックスとして利用して、一意の2番目のフィールド値に遭遇するかどうかを確認しますa。条件は、一意の値が最初に出現した場合!a[$2]++にのみ評価されます。true$2
  • fn="file"++c- 生成するファイル名増加する接尾辞付き++c

結果の表示:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

答え2

split -l 2 test

これにより 2 つの分割ファイルが生成されます。分割ファイルの出力:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

関連情報