2017-04-03 94 views
0

我需要使用awk來獲取特定的單詞或值,然後在另一個特定的單詞之後,我已經嘗試了一些awk命令,但在許多其他過濾器(如grep和sed)之後。需要使用awk來獲取特定的單詞或值在另一個特定的單詞之後?

Configuration: number=6 model=MSA SNT=4 IC=8 SIZE=16384MB NRF=24 meas=2.00 

如果需要24我用

grep IC file | awk 'NF>1{print $NF}' 

如果需要16384MB我用

:我需要從是否有相同的行超過一次像下面的線得到了這個詞的文件
grep IC file | awk -F'SIZE=' '{ print $2 }'|awk '{ print $1 }' 

我們需要使用awk從該行獲取任何單詞嗎?我用過的東西可以得到所需的東西,但我們仍然需要一個最小化的awk命令。

我確定我們可以使用一個awk從一行最小化命令獲取所需信息?

回答

1
sed -r 's/.*SIZE=([^ ]+).*/\1/' input 
16384MB 
sed -r 's/.*NRF=([^ ]+).*/\1/' input 
24 

grep方式:

grep -oP 'SIZE=\K[^ ]+' imput 
16384MB 

awk方式:

awk '{for(i=1;i<=NF;i++) if($i ~ /SIZE=/) split($i,a,"=");print a[2]}' input 
+0

sed:不是可識別的標誌:r 用法:sed [-n] [-u]腳本[文件...] sed [-n] [-u] [-e Script] ... [-f Script_file ] ... [文件...] 它的AIX盒子 – mshafey

+0

嘗試'sed's /.* SIZE = \([^] \ + \)。*/\ 1 /'',這裏我們必須手動轉義。 –

+0

我得到了整個行! – mshafey

1

你可以用多字去限制使用Awk如下完成這件事。循環遍歷字段,匹配您需要的模式並打印包含字段值的下一個字段。

awk -F'[:= ]' -v option="${match}" '{for(i=1;i<=NF;i++) if ($i ~ option) {print $(i+1)}}' file 

例子,

match="number" 
awk -F'[:= ]' -v option="${match}" '{for(i=1;i<=NF;i++) if ($i ~ option) {print $(i+1)}}' file 
6 

match="model" 
awk -F'[:= ]' -v option="${match}" '{for(i=1;i<=NF;i++) if ($i ~ option) {print $(i+1)}}' file 
MSA 

match="meas" 
awk -F'[:= ]' -v option="${match}" '{for(i=1;i<=NF;i++) if ($i ~ option) {print $(i+1)}}' file 
2.00 
+1

你爲什麼使用匹配?你可以使用'$ i〜match'。 – 123

+0

@ 123:完成了,但我的猜測是沒有什麼太大的不同性能明智的,糾正我,如果我錯了 – Inian

+0

它是完美的,但最後一個值有3個空白行之後,在輸出和某些原因,他們需要另一個最小化?他們認爲這條線有點大...... – mshafey

1

這裏是一個更通用的方法

... | awk -v k=NRF '{for(i=2;i<=NF;i++) {split($i,a,"="); m[a[1]]=a[2]} print m[k]}' 

代碼將保持不變,只是改變的關鍵k

0

如果你有GNU awk中可以使用的match第三個參數:

$ awk 'match($0,/(IC=)([^ ]*)/,a)&& $0=a[2]' file 
8 

或取得meas

$ awk 'match($0,/(meas=)([^ ]*)/,a)&& $0=a[2]' file 
2.00 

如果你使用的是其他awk中,你可以使用這個組合splitsubstrmatch

$ awk 'split(substr($0,match($0,/ IC=[^ ]*/),RLENGTH),a,"=") && $0=a[2]' file 
8 
+0

OP已經在另一個問題中提到過他們在AIX – 123

+0

@ 123否,他沒有。如果他在評論中這樣做了,你應該指示他不要。 –

+1

想說的答案不是問題,它在PS上的評論。另外爲什麼我應該? – 123

相關問題