繁体   English   中英

linux命令获取文本文件中字符串的最后一次出现

[英]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

基于sudo_O的更新建议

$ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM