您好我有以下输出:
replication complete (rid=969811 lid=969811)
或有时:
no change of listener transaction id for last 0 checks (rid=971489 lid=970863)
现在我想使用awk只获取rid和lid中的数字,以下仅适用于第一个选项
|awk -F'[^0-9]*' '{print $2-$3}'
答案 0 :(得分:1)
$ echo "no change of listener transaction id for last 0 checks (nid=971491 lid=970876)" |
awk -F'[()]' '{gsub(/[^0-9 ]/,"",$2); print $2}'
971491 970876
$ echo "no change of listener transaction id for last 0 checks (nid=971491 lid=970876)" |
awk -F'[()= ]' '{print $(NF-3), $(NF-1)}'
971491 970876
$ echo "no change of listener transaction id for last 0 checks (nid=971491 lid=970876)" |
awk -F'[()= ]' '{for (i=1;i<=NF;i++) m[$i]=$(i+1); print m["nid"], m["lid"]}'
971491 970876
$ echo "no change of listener transaction id for last 0 checks (nid=971491 lid=970876)" |
awk '{gsub(/.*\(|[^0-9 ]+|\).*$/,"")}1'
971491 970876
等等......对你来说,正确的选择真的取决于你打算用文本做什么。
嗯,我现在在你的问题中看到你可能想要打印另一个数字的减法,而不是像我想的那样打印数字。以下是基于上述内容的一种方式:$ echo "no change of listener transaction id for last 0 checks (nid=971491 lid70876)" |
awk -F'[()= ]' '{print $(NF-3) - $(NF-1)}'
615
作为练习留下的替代品!
答案 1 :(得分:0)
如果您的目标是使用awk
和rid
值,则可以使用此lid
。
awk -F\(rid=\|lid=\) '{print $2-$3}' yourfile
(OR)
awk 'BEGIN{FS="(rid=|lid=)"} {print $2-$3}' yourfile
答案 2 :(得分:0)
另一种解决方案,仅适用于GNU-awk 4
.... Defining Fields by Content in GAWK
echo "no change of listener transaction id for last 0 checks (rid=971489 lid=970863)" |
gawk -vFPAT='[0-9]+' '{print $(NF-1), $NF}'
你明白了,
971489 970863
echo "replication complete (rid=969811 lid=969811)" |
gawk -vFPAT='[0-9]+' '{print $(NF-1), $NF}'
你明白了,
969811 969811
注意:如果,你想做减法
echo "replication complete (rid=969811 lid=969811)" |
gawk -vFPAT='[0-9]+' '{print $(NF-1)-$NF}'
你明白了,
0
答案 3 :(得分:0)
awk -F'=' '{print int($2)-int($3)}'
因为awk解析字符串的方式而工作。