我正在尝试查找文件中与某个模式匹配的行数,并找到匹配的行数。例如,如果我的文件是
test1 type1 random1
test2 type2 bird
狗猫随机
我想找到具有“随机”和行数的行。理想情况下,输出类似于
test1 type1 random1
狗猫随机2
我知道如何使用grep单独执行这些任务中的任何一个,但如果我正在使用大文件,我宁愿不再读取该文件两次。我还想远离制作额外的临时文件来存储grep的结果。
我是否可以编写命令和/或简单函数来实现这些结果?
答案 0 :(得分:2)
awk 'BEGIN{total=0} {if(/random/) {total+=1; print $0;}}END{print total}' input_file
答案 1 :(得分:2)
awk '/random/{count++;print}END{print count}' file
如果找到匹配项,请递增计数器并打印。 最后打印计数。
答案 2 :(得分:2)
不。
$ cat t.txt
foo: bar
foo: quux
bar: baz
$ awk -v regex='bar' '$0 ~ regex { count++; print } END {print count}' t.txt
foo: bar
bar: baz
2
答案 3 :(得分:1)
我喜欢这里的awk
解决方案,但与往常一样,不仅有一种方法可以给猫皮肤涂抹。如果您使用nl
对输出行进行编号,则很容易看到您有多少匹配。
grep stuff from files | nl
准确地获得您在问题中指定的输出是一个简单的后处理问题(虽然我不会打扰)。通过简单的sed
脚本删除行号,然后在最后打印最新删除的号码。
grep stuff from files |
nl |
sed -n 'h # Keep a copy in hold space
s/^ *[1-9][0-9]*\t//p # Print without number
$!b # Unless at last line, we're done
x # Retrieve from hold space
s/\t.*//p' # Print only line number
(如果您的sed
方言无法将\t
识别为文字标签,或无法处理同一行中的评论,则您需要对此进行调整。在大多数贝壳中,您可以使用ctrl-V选项卡键入文字选项卡。)