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

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

我有 200 行的文件。

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

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

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

答案1

使用sed:

sed -n -e '10,100p' input.txt > output.txt

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

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

sed -e '1,9d;100q'

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

或者,您可以组合使用head和:tail

tail -n +10 input.txt | head -n 91 > output.txt

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

答案2

这应该做

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

答案3

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

touch dest

然后,打开srcdestin vim(该-p标志在选项卡中打开参数):

vim -p src dest

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

10ggv101ygtp

笔记101选择到第 101 行的开头(捕获\n第 100 行末尾的 )。


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

awk 'NR==10, NR==100' src > dest

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

答案4

您可以通过多种方式做到这一点。

解决方案awk

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

一个perl办法:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

相关内容