在给定的行将文件拆分为两个文件

tur*_*tle 15 unix

我正在寻找一种在 unix 中将文件拆分为给定行号的两个文件的方法。

split -l 100 file_name接近我正在寻找的内容,但是此命令会创建多个文件,每行 100 行。我正在寻找一个命令,可以将一个文件在给定的行号处拆分为两个文件。有没有办法在unix中做到这一点?

Rub*_*ens 19

更严格的解决方案:

(head -100 > f1.txt; cat > f2.txt) < input.txt
Run Code Online (Sandbox Code Playgroud)

  • 为了找到前 100 行输出到 f1.txt,`head` 可能会读取超过 100 行;`cat` 不会看到这些额外的字节。 (2认同)
  • 这实在是太慢了 (2认同)

che*_*ner 14

使用awk,这样您只需通过输入文件一次。下面假设您需要第一个文件中的前 122 行,第二个文件中的其余部分。

awk 'NR < 123 { print >> "top_file"; next } {print >> "bottom_file" }' file_name
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以使用headtail来获取这两个部分:

head -n K file_name > top_file
tail -n L file_name > bottom_file
Run Code Online (Sandbox Code Playgroud)

其中K是行号,L是从底部开始的行数(总行数 - K)。

(您可以使用 获得总行数wc -l file_name)。


don*_*sti 7

您可以使用csplit(如果可用)来做到这一点:

csplit file N+1
Run Code Online (Sandbox Code Playgroud)

将文件分成两部分,一部分到(并包括)行号N,另一部分从行号N+1到最后一行。
如果要拆分为(但不包括)行号N

csplit file N
Run Code Online (Sandbox Code Playgroud)