Answers:
你可以试试
grep pattern file | tail -1
要么
tac file | grep pattern | head -1
要么
tac file | grep -m1 pattern
grep -n
在实际文件中获得行号()的附加约束,我认为tac
必须避免很多事情,除非我想对进行减法wc -l
。否则,tac
用grep -m1
使一个很大的意义。
grep
它将在第一场比赛后停止工作。不带-m 1
,grep
将首先找到文件中所有匹配的模式,然后head
仅显示第一个-效率低得多。丹尼斯,请考虑将其发布在单独的答案中!
对于在Unix / Linux / Mac / Cygwin中使用巨大文本文件的人。如果您使用Windows,请检查有关Windows中Linux工具的信息:https ://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows 。
可以遵循此工作流程来获得良好的性能:
zq
从包中查询带有索引的文件。引用自其github自述文件:
创建一个索引
需要告诉zindex每行的哪一部分构成索引。可以通过正则表达式,按字段或通过外部程序将每行用管道传递来完成。
默认情况下,当要求索引file.gz时,zindex会创建file.gz.zindex的索引。
例:
在与数字正则表达式匹配的行上创建索引。捕获组指示要索引的部分,选项显示每行都有唯一的数字索引。
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
示例:在CSV文件的第二个字段上创建索引:
$ zindex file.gz --delimiter , --field 2
例:
在文档根目录的action数组中的任何项中的JSON字段orderId.id上创建索引(需要jq)。jq查询创建一个包含所有orderId.ids的数组,然后将它们与一个空格连接起来,以确保通过管道传递给jq的每一行都创建一条输出行,其中多个匹配项之间用空格分隔(这是默认的分隔符)。
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
查询索引
zq程序用于查询索引。它具有压缩文件的名称和查询列表。例如:
$ zq file.gz 1023 4443 554
也可以按行号输出,以便从文件中打印行1和行1000:
$ zq file.gz --line 1 1000
我一直在使用cat(但这会使它变长一些): cat file | grep pattern | tail -1
我会怪我爱猫的大学的Linux管理课程老师:))))
-您无需在抓取文件之前先整理文件。grep pattern file | tail -1
而且效率更高。
cat
将文件传输到grep
。您可以grep
直接通过搜索文件grep pattern file
(然后使用tail
返回最后的结果),如Cakemox的答案一样。
tac file | grep -m 1 pattern