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

时间:2013-02-05 14:06:49

标签: unix

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

3 个答案:

答案 0 :(得分:36)

要打印行N,请使用:

sed 'Nq;d' file

打印多行(假设它们按升序排列),例如994123,1002451,1010123:

sed '994123p;1002451p;1010123q;d' file

最后一个行号后的q告诉sed在到达第1010123行时退出,而不是通过循环我们不感兴趣的剩余行来浪费时间。这就是为什么它对大文件有效。

答案 1 :(得分:5)

您可以使用许多Unix工具执行此操作,例如使用awk

# print first 5 lines with awk
awk 'NR>=1&&NR<=5{print}NR>=6{exit}' file

# print selection of lines 
awk 'NR==994123||NR==1002451||NR==1010123{print}NR>1010123{exit}' file

答案 2 :(得分:0)

在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)