2015-10-05 62 views
2

只提取數字你好,我有以下的輸出:如何使用awk

replication complete (rid=969811 lid=969811) 

或有時:

no change of listener transaction id for last 0 checks (rid=971489 lid=970863) 

現在我想用awk從擺脫和蓋子得到的只是數字,以下作品只與第一個選項

|awk -F'[^0-9]*' '{print $2-$3}' 
+0

你想打印(提取)這兩個數字作爲你的主題和文字說,或者你想打印從第一個數字減去第二個數字的結果,因爲你的腳本會做?請編輯您的問題以顯示EXACT期望的輸出。 –

回答

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 

作爲練習剩下的選擇!

+2

哇!我用你第二個例子! – colttt

+0

這是那些非常常見的情況是微不足道的生產從您發佈的輸入需要的輸出之一,但更難不會產生輸出你不從文本的其他變化希望出現這種情況可能是在你輸入你沒有告訴過我們。所以,只要想一下它的作用,以及到目前爲止在您的文本中向我們展示過的任何內容是否有所不同都可能是一個問題。 –

+0

也許你可以解釋爲什麼我的awk不起作用? – colttt

0

如果您的目標是工作,您可以使用此awkridlid值。

awk -F\(rid=\|lid=\) '{print $2-$3}' yourfile 

(OR)

awk 'BEGIN{FS="(rid=|lid=)"} {print $2-$3}' yourfile 
+0

嗨,但這不適合我。當我打印$ 1我geht這個複製完成(nid = 969811,當我使用$ 2我得到這個:969811) – colttt

+0

@colttt,已更新的答案。 – sat

+0

nope,相同的輸出 – colttt

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 

注:如果,你想要d因爲這樣的awk鄰減法

echo "replication complete (rid=969811 lid=969811)" | 
gawk -vFPAT='[0-9]+' '{print $(NF-1)-$NF}' 

你,

 
0 
0
awk -F'=' '{print int($2)-int($3)}' 

作品解析字符串。