在变量中,该值可以是:

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

值162665可以更改。模式将保持不变:ab U 5.6.533.162665 U 84.kn或ab U 5.6.550 U prod342.6.165834 U 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

最佳答案

鉴于:

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

如果感兴趣的领域是上一个的2,则可以执行以下操作:
$ 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

但我不得不承认,你到底想干什么还不清楚。

关于linux - AWK帮助削减一些值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51598538/

10-16 20:38