此外,是否可以从文件末尾而不是开始开始grepping并在文件停止时停止找到第一场比赛?
#1 楼
您可以尝试grep pattern file | tail -1
或
tac file | grep pattern | head -1
或
tac file | grep -m1 pattern
#2 楼
对于在Unix / Linux / Mac / Cygwin中使用巨大文本文件的人。如果您使用Windows,请在Windows上查看有关Linux工具的信息:https://stackoverflow.com/questions/3519738/what-is-the-best-way-to-use-linux-utilities-under-windows。可以遵循此工作流程以取得良好的性能: /github.com/mattgodbolt/zindex),以
适当的键为文件建立索引
,从软件包中使用
zq
查询已索引的文件。引用自github自述文件:
创建索引
需要告诉zindex每行的哪一部分构成索引。
可以通过正则表达式,按字段来完成,或通过外部程序通过管道将每个
行进行管道传输。
默认情况下,zindex在被要求
索引file.gz时创建file.gz.zindex的索引。
示例:
在与数字正则表达式匹配的行上创建索引。捕获组指示要索引的部分,
,选项显示每行都有唯一的数字索引。
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
示例:
在CSV文件的第二个字段上创建索引:
$ zindex file.gz --delimiter , --field 2
示例:
在
JSON上创建索引文档根目录
actions数组中的任何项目中的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
#3 楼
我一直在使用cat(但这会使它变长一些):cat file | grep pattern | tail -1
我要怪我爱猫的大学的Linux管理课程老师:)))))))
-您无需在抓取文件之前先对文件进行分类。
grep pattern file | tail -1
,而且效率更高。评论
这只是Cakemox回答的第一部分,但更糟的是。
– augurar
17年9月15日在23:57
它可以工作,但是可以执行不必要的步骤。对于轻型用途,此解决方案效果很好,但效果不佳。原因是因为您不需要整理文件并将其通过管道传输到grep。您可以让grep直接通过grep模式文件搜索文件(然后使用tail返回最后结果),就像Cakemox的答案一样。
– jvriesem
19年7月26日在17:54
评论
tac文件| grep -m 1模式
–丹尼斯·威廉姆森
2010年11月2日,0:54
加上我想在实际文件中获得行号(grep -n)的附加约束,我认为必须避免使用tac,除非我想对wc -l进行一些减法。否则,使用grep -m1进行tac很有意义。
–尼克·美林(Nick Merrill)
2014年7月4日在18:48
我很想看到一个性能更高的版本,因为我正在尝试搜索20GB的文件。
–杰夫
2015年9月4日在17:56
@DennisWilliamson的答案要好得多,因为grep将在首场比赛后停止工作。如果不使用-m 1,grep将首先在文件中找到所有匹配的模式,然后head仅显示第一个-效率低得多。丹尼斯,请考虑将其发布在单独的答案中!
– Gilad mayani
17年5月18日在16:33
要在配管时保持grep颜色,请使用--color = always。尾随grepping多个文件时效果很好(例如grep pattern -r path),但是不建议对多个文件使用tac选项(可能会占用大量内存)。
– Noam Manos
20-2-25在11:35