如何将 200 行文件中的第 10 行到 100 行放入新文件中

sun*_*nil 29 sed tail text-processing head

我有 200 行的文件。

我需要从 10 到 100 中提取行并将它们放入一个新文件中。

你如何在 unix/Linux 中做到这一点?

您可以使用哪些可能的命令?

Mic*_*mer 56

使用sed

sed -n -e '10,100p' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

sed -n意味着默认情况下打印每一行。-e表示将下一个参数作为 sed 脚本执行。10,100p是一个 sed 脚本,这意味着从第 10 行开始,直到第 100 行(包括),打印 ( p) 该行。然后将输出保存到output.txt.

如果你的文件比建议的长,这个版本(在评论中建议)会更快:

sed -e '1,9d;100q'
Run Code Online (Sandbox Code Playgroud)

这意味着删除第 1-9 行,在第 100行后退出,并打印其余部分。对于 200 行,这无关紧要,但对于 200,000 行,第一个版本仍然会查看每一行,即使它永远不会打印它们。我一般更喜欢第一个版本,因为它是明确的,但是对于长文件,这会更快——你最了解你的数据。

或者,您可以使用headtail组合使用:

tail -n +10 input.txt | head -n 91 > output.txt
Run Code Online (Sandbox Code Playgroud)

这次,tail -n +10从第 10 行开始打印整个文件,并head -n 91打印前 91 行(直到并包括原始文件的第 100 行)。它以output.txt相同的方式重定向到。

  • 这可能更像 `sed '1,9d;100q'`。反正更快。 (3认同)

Cre*_*eek 8

这应该做

tail -n +10 file.txt | head -n 91 > newfile.txt


Hal*_*ost 7

如果您要在 中执行此操作vim,那将非常简单。假设您的文件已命名,src并且您希望将行移动到的文件是dest. 如果dest尚不存在,您将创建它:

touch dest
Run Code Online (Sandbox Code Playgroud)

然后,打开两个srcdestvim(该-p标志打开论点选项卡):

vim -p src dest
Run Code Online (Sandbox Code Playgroud)

跳到第十行;选择从第 10 行到第 100 行的所有内容;猛拉;切换到包含dest;的选项卡 粘贴。

10ggv101ygtp
Run Code Online (Sandbox Code Playgroud)

注意101选择到第 101 行的开头(在第\n100 行的末尾捕获)。


与使用命令行工具相比,这显然是一个更复杂的过程,但确实具有为您提供视觉选择的优势(因此您可以确保获得所需的一切)。然而,这似乎也是一个很好的用例awk

awk 'NR==10, NR==100' src > dest
Run Code Online (Sandbox Code Playgroud)

NR变量允许您根据行数进行模式匹配。因此,上面的命令从中提取第 10-100 行src,然后您的 shell 将输出重定向到dest.

  • 跑不了的 (2认同)