在变量中,该值可以是:
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/