我只需要获取其下方的值WOX
,在本例中等于 4
IOT CND FO WZX END
0 0 0 0
WOX SR POW LIO LIO2
4 00 0
FDR OTY M
0
我尝试了下面的代码,但我无法进一步。
WOXpos=index(DATA,"WOX")
BR=trim(substr(DATA,WOXpos,3))
我得到的输出如下
IOT
0
WOX
4
FDR
0
答案1
编辑:
正如评论中所述,密钥WOX
仅应位于第一列中。此脚本假定字段由一个或多个空格或制表符分隔,并且将忽略前导空格或制表符。
awk -v key=WOX 'found { print $1; found=0 }
$1 == key { found=1 }' inputfile
印刷
4
解释:
在 中awk
,字段编号/列从 1 开始。($0
指整行。)
-v key=WOX
= 设置变量found { print $1; found=0 }
= 如果在前一行中找到键,则打印第一列中的值并清除标志$1 == key { found=1 }
= 比较第一个字段并在匹配时设置标志
如果该键WOX
出现在多行中,脚本将打印所有出现的值下方的值,每行一个。
先前的提案
awk -v key=WOX 'col { print $col; col=0 }
{ for(i=1; !col && (i<=NF); i++) if($i == key) col=i }' inputfile
解释:
在 中awk
,字段编号/列从 1 开始。($0
指整行。)
-v key=WOX
= 设置变量col { print $col; col=0 }
= 如果列非零,则打印该列中的值并清除该列{ for(i=1; !col && (i<=NF); i++) if($i == key) col=i }
= 在循环中搜索与该键匹配的第一个字段并保存列号。
如果WOX
出现多次在同一行,它将打印第一个值下方的值。
该脚本适用于问题中显示的输入和键,但如果键或值字段之前有空值,则会出现问题。