[英]linux command to get the last appearance of a string in a text file
我想用linux命令在文本文件中找到字符串的最后一个外观。 例如
1 a 1
2 a 2
3 a 3
1 b 1
2 b 2
3 b 3
1 c 1
2 c 2
3 c 3
在这样的文本文件中,我想找到b的最后一次出现的行号,这是6.我可以找到第一个外观
awk '/ b / {print NR;exit}' textFile.txt
但我不知道如何在最后一次出现时这样做。
cat -n textfile.txt | grep " b " | tail -1 | cut -f 1
cat -n
将文件打印到STDOUT前缀行号。 grep
greps out包含“b”的所有行(你可以使用egrep获得更高级的模式,或者使用fgrep获得更快的grep固定字符串) tail -1
打印包含“b”的那些行的最后一行 cut -f 1
打印第一列,即cat -n
第#列 或者如果你愿意,你可以使用Perl(这与你在awk中所做的非常相似,但坦率地说,如果我有Perl方便,我个人不会使用awk - Perl支持awk可以做的100%,通过设计,作为1行 - YMMV):
perl -ne '{$n=$. if / b /} END {print "$n\n"}' textfile.txt
这可以工作:
$ awk '{if ($2~"b") a=NR} END{print a}' your_file
我们检查每个第二个文件是“b”,并记录行数。 它是附加的,所以当我们读完文件时,它将是最后一个。
测试:
$ awk '{if ($2~"b") a=NR} END{print a}' your_file
6
$ awk '{if ($2=="b") a=NR} END{print a}' your_file
避免在第二场有一些abc
。
它也是有效的(更短的,我保留上面的那个,因为它是我认为的那个:D):
$ awk '$2=="b" {a=NR} END{print a}' your_file
如果$ 2总是被分组的另一种方法(可能更有效,然后等到结束):
awk 'NR==1||$2=="b",$2=="b"{next} {print NR-1; exit}' file
要么
awk '$2=="b"{f=1} f==1 && $2!="b" {print NR-1; exit}' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.