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

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

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

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

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

関連情報