web-dev-qa-db-ja.com

ファイルを2つに分割する

大きなファイルがあり、2つのファイルに分割する必要があります。最初のファイルで1000行を選択して別のファイルに入れ、最初のファイルでそれらの行を削除するとします。

splitを使用してみましたが、複数のチャンクが作成されています。

23
Aravind

最も簡単な方法は、おそらくheadtailを使用することです。

$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2

これにより、input-fileの最初の1000行がoutput1に入れられ、1001からoutput2の終わりまでのすべての行が入れられます。

36
Michael Mrozek

splitが最善のアプローチだと思います。

-l xxxxオプションを使用してみてください。ここで、xxxxは各ファイルに必要な行数です(デフォルトは1000)。

作成されるファイルの量についてより懸念がある場合は、-n yyオプションを使用できます。 -n 2を使用すると、各ファイルの行数に関係なく、ファイルが2つの部分に分割されます。

wc -l filenameを使用して、ファイルの行数をカウントできます。これはlinesオプションを指定した 'wordcount'コマンドです。

参考文献

  • man split
  • man wc
16
Lucien Raven

これは csplit のジョブです:

csplit -s infile 1001 

silently 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
10
don_crissti

質問が要求することを1つのコマンドで実行する簡単な方法:

awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile

または、長くて直感的に理解できるコマンドを入力するのが本当に嫌いな人のために、

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile