2013-11-04 109 views
1

我有一個由多個字符分隔的字段的文件。例如:使用AWK的優雅方式

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命令文件。

回答

1

這也可以實現在awk使用多個字段分隔符:

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

這告訴awk使用字段分隔符=;。基於此,你想要的數字在第三位。

如果您期望ghi部分是可變的和重要的,你也可以使用grep與向後看:

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

這將ghi=後打印所有數字。

+0

他的例子並沒有刪除';'。其他有多個分隔符的方法'awk -F「= |;」 '{print $ 3}'文件' – Jotne

+0

是的,@Jotne,但我想這是很好的實現。我喜歡這個'-F「= |;」',看起來很整齊,只有幾個分隔符。 – fedorqui

+0

你可以讓Word作爲分隔符用'|'像'-f「之前|之後」' – Jotne

2

是的,可以在一個數組a使用=作爲分離器使用split功能awk

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

這除以日提交NR 3,然後打印陣列a[2]


的第二值如果字段3中的字段有變化並且您喜歡最後一個字段,請這樣做:

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

在你的情況,這將做太多:

awk -F= '{print $NF}' 
+0

謝謝。這種解析方式似乎很簡單和優雅。 – gthm

+0

更新以更多信息。如果你喜歡它,你可以接受:) – Jotne