2017-04-03 90 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

相关问题