我正在寻找一种在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
您可以使用head
和tail
来获取两个部分:
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
您可以阅读您版本的手册页head
以tail
获取更多信息。