我需要获取 AWK 中特定行和列的值

我需要获取 AWK 中特定行和列的值

我只需要获取其下方的值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出现多次在同一行,它将打印第一个值下方的值。

该脚本适用于问题中显示的输入和键,但如果键或值字段之前有空值,则会出现问题。

相关内容