AWK帮助削减一些价值

时间:2018-07-30 16:33:42

标签: linux awk

在变量中,值可以像这样:

ab_5.6.533.162665_84.kn or ab_5.6.550_prod342.6.165834_84.kn

值162665可以更改。模式将保持不变:ab_5.6.533.162665_84.kn或ab_5.6.550_prod342.6.165834_84.kn ..在任何情况下,我都只希望最后一个倒数第三个值..例如在这种情况下162665。因此,问题在于获取ab_5.6.533./ab_5.6.550_prod342.6之间的值。和_84.kn,即162665

我一直想抓住(倒数第三)“ 165834”这个值。任何帮助将不胜感激

简而言之,我需要一个在两种情况下都可以使用的命令。

我使用过cut,但是它只适用于一种情况,不适用于其他情况

root:~# cat abc.log  | cut -d '.' -f 4
162665_84
6
root:~# 

cat abc.log 
ab_5.6.533.162665_84.kn
ab_5.6.550_prod342.6.165834_84.kn

1 个答案:

答案 0 :(得分:0)

给出:

$ echo "$s"
ab_5.6.533.162665_84.kn
ab_5.6.550_prod342.6.165834_84.kn

如果感兴趣的字段是倒数第二个,则可以执行以下操作:

$ echo "$s" | awk -F "[._]" '{print $(NF-2)}'
162665
165834

或者,如果该字段是sed,则可以使用.[0-9]+_

$ echo "$s" | sed -nE 's/.*[.]([0-9][0-9]*)_.*$/\1/p'
162665
165834

或者您可以使用rev,以便可以使用cut来对字段进行倒计数:

$ echo "$s" | rev | cut -d _ -f 2 | cut -d . -f 1 | rev
162665
165834

但是我不得不承认你所追求的还不是很清楚。