大きなファイルがあり、2つのファイルに分割する必要があります。最初のファイルで1000行を選択して別のファイルに入れ、最初のファイルでそれらの行を削除するとします。
split
を使用してみましたが、複数のチャンクが作成されています。
最も簡単な方法は、おそらくhead
とtail
を使用することです。
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
これにより、input-file
の最初の1000行がoutput1
に入れられ、1001からoutput2
の終わりまでのすべての行が入れられます。
split
が最善のアプローチだと思います。
-l xxxx
オプションを使用してみてください。ここで、xxxxは各ファイルに必要な行数です(デフォルトは1000)。
作成されるファイルの量についてより懸念がある場合は、-n yy
オプションを使用できます。 -n 2
を使用すると、各ファイルの行数に関係なく、ファイルが2つの部分に分割されます。
wc -l filename
を使用して、ファイルの行数をカウントできます。これはlinesオプションを指定した 'wordcount'コマンドです。
man split
man wc
これは csplit
のジョブです:
csplit -s infile 1001
s
ilently split infile
、最初のピースxx00
-行1001まで(ただしこれは含みません)、2番目のピースxx01
-残りの行。
別の出力ファイル名が必要な場合は、オプションで遊ぶことができます。 -f
を使用し、prefixを指定する:
csplit -sf piece. infile 1001
piece.00
およびpiece.01
という名前の2つのファイルを生成します
スマートhead
を使用すると、次のようなこともできます。
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
質問が要求することを1つのコマンドで実行する簡単な方法:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
または、長くて直感的に理解できるコマンドを入力するのが本当に嫌いな人のために、
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile