回答:
それsplit
が最善のアプローチだと思います。
-l xxxx
オプションを使用してみてください。ここで、xxxxは各ファイルに必要な行数です(デフォルトは1000です)。
-n yy
作成されたファイルの量をより重視する場合は、このオプションを使用できます。Use -n 2
は、各ファイルの行数に関係なく、ファイルを2つの部分に分割します。
でファイルの行数を数えることができますwc -l filename
。これは、linesオプションを指定した「wordcount」コマンドです。
man split
man wc
split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
。
これは仕事ですcsplit
:
csplit -s infile 1001
最初の部分-行1001までを含むが、2番目の部分-残りの行をs
不均等に分割します。
異なる出力ファイル名が必要な場合、たとえばプレフィックスを使用して指定する場合、オプションを使用できます。infile
xx00
xx01
-f
csplit -sf piece. infile 1001
名前の2つのファイルを生成piece.00
し、piece.01
スマートhead
を使用すると、次のようなこともできます。
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit
。非常に素晴らしい。(私はただPOSIXコマンドのリストを読んでいて、csplit
最初はコマンドの目的に頭を悩ませるのに苦労しました。それは本当に簡単だと判明しました。):)
質問が求めることを1つのコマンドで実行する簡単な方法:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
または、長く直感的に理解できるコマンドの入力を本当に嫌う人のために、
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --help
か?