正则表达式匹配多次时选择一个输出

时间:2017-01-13 18:52:10

标签: awk

给定一个包含多行目标的输入文件

...
100 100 100 100
Expression: out1
200 200 200 200
300 300 300 300
Expression: out2
400 400 400 400
500 500 500 500
Expression: out3
...

如果我这样做

awk '/Expression:/ {printf " %f ",$2 } ' $file

我得到多个输出

 out1 out2 out3

如何根据文件中的位置选择其中一个输出,例如out3

3 个答案:

答案 0 :(得分:1)

For - 如果为正则表达式找到n行匹配,那么如何选择最后一行?

awk '/Expression:/ { last_found = $2 }END{print last_found }' file

显示给定正则表达式的第n个匹配

awk '/Expression:/ { if(++i==3){ print $2; exit } }' file

<强>输入

akshay@db-3325:~$ cat f
...
100 100 100 100
Expression: out1
200 200 200 200
300 300 300 300
Expression: out2
400 400 400 400
500 500 500 500
Expression: out3
...

<强>输出

# for 3rd one
akshay@db-3325:~$ awk '/Expression:/ { if(++i==3){ print $2; exit } }' f
out3

# For 2nd one
akshay@db-3325:~$ awk '/Expression:/ { if(++i==2){ print $2; exit } }' f
out2

# For last one
akshay@db-3325:~$ awk '/Expression:/ { last_found = $2 }END{print last_found }' f
out3

答案 1 :(得分:1)

只需计算出现次数并在计数器达到阈值后打印最后一个值:

awk '/Expression/{c+=1;s=$2};c==3{print s}'

答案 2 :(得分:0)

尝试:

awk '/Expression/{print $NF}'  Input_file
OR
awk '/Expression/{print $2}'  Input_file