如何用awk选择两个特定的行?

X.L*_*INK 1 bash awk

/!\问题基本解决了,请看下面我自己的答案,了解更多细节和附属问题/!\

我试图根据特定的单词添加两行,但我能找到的是在一些模式之后添加所有内容:如何在两个标记模式之间选择可能出现多次awk/sed的行

这不是我正在照顾的.

考虑以下输出:

aji 1
bsk 2
cmq 3
doh 4
enr 5
fwp 6
gzx 7
Run Code Online (Sandbox Code Playgroud)

我想要的是像cmq + fwp,输出应该是:

9
Run Code Online (Sandbox Code Playgroud)

我知道如何添加值,但我错过了这select line containing cmq, then select line containing fwp部分.

那么,有没有办法awk可以独立地严格选择两个特定的行(然后添加它们)?

编辑:

据我所知,匹配单词是awk '/cmq/',但我需要这样做,因为我们也说"fwp",所以我可以添加它们.

Aks*_*gde 6

$ awk '$1 ~ /^(cmq|fwp)$/{sum+=$2} END { print sum}'  infile
Run Code Online (Sandbox Code Playgroud)

说明:

awk '$1 ~ /^(cmq|fwp)$/{     # look for the match in first field
       sum+=$2               # sum up 2nd field ($2) value,where sum is variable
     }
     END{                    # at the end
       print sum             # print variable sum
     }' infile
Run Code Online (Sandbox Code Playgroud)

检测结果:

$ cat infile
aji 1
bsk 2
cmq 3
doh 4
enr 5
fwp 6
gzx 7

$ awk '$1 ~ /^(cmq|fwp)$/{sum+=$2} END { print sum}'  infile
9
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`awk'/ cmq | fwp/{s + = $ 2} END {print s}'file`搜索整个短语,如果您需要更多,只需添加更多像`/ cmq | fwp | nyo | itm/`等.如果你想限制到第一个字段并要求匹配等于第一个字段,那就是'awk'$ 1~/^(cmq | fwp)$/{...` (3认同)