読者です 読者をやめる 読者になる 読者になる

drag n drop

調べたことを書きます

ファイルを真っ二つに分割する

行数を基準に真っ二つくらいに分割する

 

split -l $(expr $(wc -l <in_file> | cut -d " " -f 1) / 2 + 1) <in_file> <out_file_prefix>

 

例:

split -l $(expr $(wc -l foo.txt | cut -d " " -f 1) / 2 + 1) foo.txt bar.

 

バッククォート「`」は、ネスト出来ないので、

$(<コマンド>)という書き方でコマンド置換を行った

 

in_fileの行数が奇数の場合、行数/2だけだと3分割になるので、行数/2+1にした

ただし、行数が偶数だと、真っ二つにはならず、前半が2行多くなる

ここらへんが苦しいので、

1行にこだわらないなら、変数を使って2行以上にする方がいいかも

 

参考:

Linuxコマンド集 - 【 split 】 ファイルを分割する:ITpro

Linuxコマンドでテキストデータを自在に操る - orangain flavor

シェル・スクリプト・リファレンス - 【 整数計算を行う「expr」 】:ITpro

Linuxコマンド集 - 【 wc 】 テキスト・ファイルの行数、単語数、バイト数を表示:ITpro

bash Tips - コマンド置換と算術式展開 - Qiita