如何在unix中从巨大的文本文件中获取特定的行?

如何在unix中从巨大的文本文件中获取特定的行?,unix,Unix,我使用基于分隔文本文件的导入系统。使用的文件有时可能几乎是2GB大,我必须检查该文件中的一些行。 所以我想知道如何输出(在另一个文件上,或者仅仅在屏幕上)特定值的行?例如,行号1010123、1002451、994123等,与源文件中的行号完全相同?您可以使用许多Unix工具,例如使用awk: #使用awk打印前5行 awk'NR>=1&&NR=6{exit}文件 #打印行的选择 awk'NR==994123 | | NR==1002451 | | NR==1010123{print}NR>10

我使用基于分隔文本文件的导入系统。使用的文件有时可能几乎是2GB大,我必须检查该文件中的一些行。
所以我想知道如何输出(在另一个文件上,或者仅仅在屏幕上)特定值的行?例如,行号1010123、1002451、994123等,与源文件中的行号完全相同?

您可以使用许多Unix工具,例如使用
awk

#使用awk打印前5行
awk'NR>=1&&NR=6{exit}文件
#打印行的选择
awk'NR==994123 | | NR==1002451 | | NR==1010123{print}NR>1010123{exit}文件

要打印行
N
,请使用:

sed 'Nq;d' file
要打印多行(假定为升序),例如994123、1002451、1010123:

sed '994123p;1002451p;1010123q;d' file
最后一个行号后的
q
告诉
sed
在到达1010123行时退出,而不是在我们不感兴趣的其余行上循环浪费时间。这就是为什么它对大文件很有效。

在python中:

readThisFile = open('YOURFILE')
outputFile = open('OUTPUT', w)

for actualline, linetext in enumerate(readThisFile):
    if actualline == WANTEDLINE
        outputFile.write(linetext)
    else:
        pass

如果需要,您可以修改该脚本以使用参数(如getline.py 1234)

sed/
awk
如何在非常大的文件(如他在问题中提到的文件(~2GB))上执行?行号不是顺序的。不是第一个N或最后一个N。它们只是有错误的线条。我在表格中有行号,我只想输出特定的行号。@BogdanM请参见第二个
awk
示例(dogbane回答说明了如何使用sed),我认为打印范围对您也很有用。在
outputFile.write(linetext)之后退出会更有效率
也会打印出来,因为问题只标记为
unix
,所以我不确定OP是否有可用的
Python
。我不能说是否有可用的Python(他没有说他想要哪种语言编写的解决方案)。因为中途退出:是的,这是可以做到的,但我的脚本并不是一个“随时可用,只需复制并粘贴”的脚本,它只是一个提示,与此相关,一个很好的链接: