将一个文件一分为二

Ara*_*ind 34 awk text-processing split csplit

我有一个大文件,需要拆分成两个文件。假设在第一个文件中应该选择 1000 行并将其放入另一个文件中并删除第一个文件中的那些行。

我尝试使用,split但它正在创建多个块。

Mic*_*zek 48

最简单的方法可能是使用headand tail

$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Run Code Online (Sandbox Code Playgroud)

这会将前 1000 行input-file放入 into output1,以及从 1001 到结束的所有行output2


小智 25

我认为这split是你最好的方法。

尝试使用该-l xxxx选项,其中 xxxx 是每个文件中所需的行数(默认为 1000)。

-n yy如果您更关心创建的文件数量,则可以使用该选项。-n 2无论每个文件中的行数如何,使用都会将您的文件分成两部分。

您可以使用wc -l filename. 这是带有lines 选项的'wordcount' 命令。

参考

  • man split
  • man wc


don*_*sti 15

这是一份工作csplit

csplit -s infile 1001 
Run Code Online (Sandbox Code Playgroud)

s悄悄地拆分infile,第一部分xx00- 最多但不包括第 1001 行,第二部分xx01- 其余行。
如果您需要不同的输出文件名,例如使用-f和指定前缀,您可以使用这些选项:

csplit -sf piece. infile 1001 
Run Code Online (Sandbox Code Playgroud)

产生两个名为piece.00和的文件piece.01


使用智能,head您还可以执行以下操作:

{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
Run Code Online (Sandbox Code Playgroud)

  • 哇,它真的 * 是 * 一份`csplit` 的工作。非常好。(我只是通读了 POSIX 命令列表,一开始我很难理解 `csplit` 命令的用途。事实证明它真的很简单。):) (2认同)

G-M*_*ca' 5

一种简单的方法来完成问题的要求,在一个命令中:

awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
Run Code Online (Sandbox Code Playgroud)

或者,对于那些真的讨厌输入长而直观的命令的人,

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
Run Code Online (Sandbox Code Playgroud)