基于 awk 中的字段值进行过滤

基于 awk 中的字段值进行过滤

to我想打印后面有的国家~:

welcome~:to~:Germany
welcome~:no please~:Italy
welcome~:to~:Brazil
welcome~:not ok~:China

注:我不知道除了“ to”之外还会有什么。它可以是任何内容并且可以更改(例如no please, not ok)。

我尝试使用 cut、awk、sed。但我无法弄清楚。

awk -F "~:" '{print $2 $NF}'

但我得到的输出如下:

toGermany
no pleaseItaly
toBrazil
not okChina

如何过滤to.以外的国家/地区

更新:

替代解决方案:(通过剪切找出):-)

grep -v "to" |cut -d ':' -f3 

答案1

当您使用~:作为字段分隔符时,您可以检查第二个字段是否等于to并打印第三个字段,即国家/地区:

awk -F"~:" '$2 == "to" { print $3; }' file

结果:

Germany
Brazil

答案2

不要忘记sed解决方案:

sed -n '/~:to~:/s/.*://p'

或更快(可能是)

sed '/~:/{s/to~:/\n/;D}'

相关内容