web-dev-qa-db-ja.com

行番号で分割する方法

特定の行番号から400k行の長いログファイルを分割したい。

この質問では、これを任意の数300kにします。

これを行うことができるLinuxコマンドはありますか(スクリプト内)?

splitを使用すると、ファイルをサイズまたは行番号で均等に分割できますが、それは私が望んでいることではありません。 1つのファイルの最初の300kと2番目のファイルの最後の100kにしたいです。

任意の助けをいただければ幸いです。ありがとう!

考え直してみると、これはスーパーユーザーまたはサーバー障害サイトにより適しているでしょう。

93
denormalizer
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

また、最初の分割が2番目の分割よりも大きいため、考え直してみると、分割は機能します。スプリットは、入力のバランスを最後のスプリットに入れるため、

split -l 300000 file_name

入力が400k行の場合、xaaが300k行、xabが100k行で出力されます。

177
academicRobot