回答:
少し厳しいソリューション:
(head -100 > f1.txt; cat > f2.txt) < input.txt
head
に出力する最初の100行を見つけるために、わずか100行を超える可能性がありf1.txt
ます。これらの余分なバイトは、からは見えませんcat
。
を使用するawk
と、入力ファイルを1回だけ通過する必要があります。次の例では、最初のファイルの最初の122行と、残りの2行目が必要であると想定しています。
awk 'NR < 123 { print >> "top_file"; next } {print >> "bottom_file" }' file_name
csplit
(可能な場合)を使用してそれを行うことができます:
csplit file N+1
ファイルを2つの部分に分割します。1つは行番号まで(および行番号を含む)、もう1つは行番号N
からN+1
最後の行までです。
行番号まで(ただし行番号を含まない)分割したい場合N
:
csplit file N
csplit
はありません。このジョブ用に最適化されています。
両方head
とtail
、彼らは他の場合よりもファイルの「その他」の端から生産ラインにオプションを持っています。したがって、次の2つのオプションがあります。
head -n 100 source.txt > file1.txt
head -n -100 source.txt > file2.txt
または(NNNはの出力より100小さいwc -l source.txt
):
tail -n +NNN source.txt > file1.txt
tail -n NNN source.txt > file.txt
お使いのバージョンのhead
およびtail
詳細については、マニュアルページを参照してください。
「wc」、「dc」、「head」、「tail」を使用できます。すなわち
unix> wc -l foo
545 /tmp/foo
unix> dc -e '545 100 - p'
445
unix> head -n 100 foo > filea
unix> tail -n 445 foo > fileb
使いやすくするために、上記をシェルスクリプトに変えることができます。
wc
以前とはカウントせず、awk
ソリューションと同様に、入力ファイルはまだ一度だけ処理されます。