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

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

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

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

答案1

更严格的解决方案:

(head -100 > f1.txt; cat > f2.txt) < input.txt

答案2

使用awk,这样您只需遍历输入文件一次。以下假设您想要第一个文件中的前 122 行,其余行在第二个文件中。

awk 'NR < 123 { print >> "top_file"; next } {print >> "bottom_file" }' file_name

答案3

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

head -n K file_name > top_file
tail -n L file_name > bottom_file

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

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

答案4

head和都tail可以选择从文件的“另一”端生成行。因此,您有以下两个选项:

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

您可以阅读您版本的手册页headtail获取更多信息。

相关内容