将文件分成两部分


18

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

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


你检查了split --help吗?
Braiam

是的,我已经检查了它,但是正在创建不需要我的多个文件。
Aravind

Answers:


30

最简单的方法可能是使用headtail

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

这会将前1000行从input-file放入output1,并将所有1001的行放到output2


13

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

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

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

您可以使用以下方法计算文件中的行数: wc -l filename。这是带有lines选项的'wordcount'命令。

参考文献

  • man split
  • man wc

1
这是如何将文件拆分为具有固定行数的文件,或者如何将文件平均拆分为固定数目的文件。有没有一种方法可以分为一个1000行文件和一个包含其他所有文件的文件?那就是他要的。我在手册页中找不到它
Michael Mrozek

你是正确的迈克尔。我认为我对这个问题持简单的看法。在这种情况下,您的解决方案是最好的解决方案。另一种方法是使用“ sed”命令:sed -n 1,1000 originalfile> first_1000_lines。sed'1,1000d'originalfile>剩下的行。
Lucien Raven 2014年

当然可以split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
G-Man说'Resstate Monica''14

8

这是一项工作csplit

csplit -s infile 1001 

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

csplit -sf piece. infile 1001 

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


有了智能,head您还可以执行以下操作:

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

1
哇,这确实工作csplit。非常好。(我只是阅读POSIX命令的列表,起初在围绕csplit命令的目的缠绕头时遇到了很大的麻烦。事实证明,这真的很简单。):)
Wildcard'Nov2

4

在一个命令中执行问题要求的简单方法:

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

或者,对于那些真正讨厌键入长而直观易懂的命令的人,

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.