使用AWK的优雅方式

时间:2013-11-04 08:28:49

标签: parsing unix awk

我有一个文件,其中的字段由多个字符分隔。对于Ex:

abc sometext def;ghi=123; 
abc sometext def;ghi=123; 
abc sometext def;ghi=123; 

现在我想在AWK中解析文件以提取字段。例如,获取'ghi'的所有值,

awk '{print $3}' | awk 'BEGIN {FS = "="} { print $NF }' inputFile.txt

有没有办法一次解析文件而不是使用多个管道和AWK命令。

2 个答案:

答案 0 :(得分:2)

是的,您可以使用split

中的awk功能
awk '{split($3,a,"=");print a[2]}'
123;
123;
123;

这将使用3作为分隔符的nr =归档为数组a,然后打印数组a[2]的第二个值


如果第3号字段中的字段有变化,而您喜欢最后一个字段,请执行以下操作:

awk '{n=split($3,a,"=");print a[n]}'
123;
123;
123;

在你的情况下,这也会这样做:

awk -F= '{print $NF}'

答案 1 :(得分:1)

这也可以使用awk中的多个字段分隔符来完成:

$ awk -F"[=;]" '{print $3}' file
123
123
123

这会告诉awk使用字段分隔符=;。基于此,您想要的数字位于第3位。

如果您希望ghi部分可以更改且重要,那么您也可以将grep与后卫一起使用:

$ grep -Po '(?<=ghi=)\d+' file
123
123
123

这将打印ghi=之后的所有数字。