如何从已知位置从非常大的文件中提取多行?

如何从已知位置从非常大的文件中提取多行?

我有一个巨大的 .xml 文件,重 500Mb,我想从我可以 grep 的已知位置开始从中提取一些文本。

当我只执行 grep 时,它会显示关键字出现的位置,但不会显示行号。如果我需要从第一个 grep 中提取 200 行怎么办?

答案1

grep -A200 searchword file.xml可用于在每场比赛后列出 200 行。searchword是您要搜索的单词,也是file.xmlXML 文件名。

您还可以-B200在每场比赛之前列出 200 行,并-C200在之前列出 200 行,之后列出 200 行。

请注意,正确的 XML 解析器几乎总是比使用 grep 或 regexp 更好的选择:

https://stackoverflow.com/a/1732454/131264

答案2

您可以使用 提取行范围awk。以下命令将从 FILENAME 中提取 2-6 行(含)并将其写入 OUTPUT。

cat FILENAME | awk 'NR >= 2 && NR <= 6' > OUTPUT

您还可以使其从已知位置提取到文件末尾,如下所示

cat FILENAME | awk 'NR >= 2' > OUTPUT

NR代表“号码记录”

您还可以使用 grep 动态获取行号并将其传递给awk命令以提取这些行

LINE_START=`grep -nr "STRING" FILENAME | grep -o '^[0-9]\+'`
cat FILENAME | awk 'NR >= $LINE_START' > OUTPUT

答案3

事实上,我可以使用 Notepad++ 轻松打开它,然后只需按 ctrl+F 进行搜索。

相关内容