19

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

4

3 回答 3

38

要打印 line N,请使用:

sed 'Nq;d' file

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

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

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

于 2013-02-05T14:11:17.707 回答
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
于 2013-02-05T14:11:10.963 回答
0

在蟒蛇中:

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

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

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

于 2013-02-05T14:16:32.883 回答