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


18

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

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


確認しましたsplit --helpか?
Braiam 14年

はい、チェックしましたが、必要のない複数のファイルを作成しています。
アラビン14年

回答:


30

最も簡単な方法は、使用におそらくあるheadtail

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

これにより、最初の1000行がからinput-fileoutput1、1001から最後までのすべての行がoutput2


13

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

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

-n yy作成されたファイルの量をより重視する場合は、このオプションを使用できます。Use -n 2は、各ファイルの行数に関係なく、ファイルを2つの部分に分割します。

でファイルの行数を数えることができますwc -l filename。これは、linesオプションを指定した「wordcount」コマンドです。

参照資料

  • man split
  • man wc

1
これは、固定された行数で多数のファイルに分割する方法、または固定された数のファイルに均等に分割する方法です。1000行のファイルと他のすべてのファイルに分割する方法はありますか?それが彼が求めていたものです。マニュアルページで見つけることができませんでした
マイケルMrozek

あなたは正しいマイケルです。私はこの質問について単純な見方をしたと思います。この場合、あなたのソリューションが最適です。別の方法は、 'sed'コマンドを使用することです:sed -n 1,1000 originalfile> first_1000_lines。sed '1,1000d' originalfile> remaining_lines。
ルシアンレイヴン14年

もちろんできますsplit -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
G-Manは「Reinstate Monica」と言います14

8

これは仕事ですcsplit

csplit -s infile 1001 

最初の部分-行1001までを含むが、2番目の部分-残りの行をs不均等に分割します。 異なる出力ファイル名が必要な場合、たとえばプレフィックスを使用して指定する場合、オプションを使用できます。infilexx00xx01
-f

csplit -sf piece. infile 1001 

名前の2つのファイルを生成piece.00し、piece.01


スマートheadを使用すると、次のようなこともできます。

{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile

1
うわー、それは本当にあるのジョブcsplit。非常に素晴らしい。(私はただPOSIXコマンドのリストを読んでいて、csplit最初はコマンドの目的に頭を悩ませるのに苦労しました。それは本当に簡単だと判明しました。):)
ワイルドカード

4

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

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

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

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.