2017-06-17 51 views
1

我试图解析字符串像这样使用bash使用两个现场spearators

OPS |all|1234|ip:port1|name|state|number|id|phone=123;zip=123;state=AB;city=seattle . 
OPS |all|1234|ip:port2|name|state|number|id|phone=123;zip=123;state=AB;city=spokane . 

我想这样

seattle | ip port1 
spokane | ip port2 

我试图用awk这个

输出
awk -F'|' '{ n = split($4,array,"|"); printf "%s, %s\n", $4, array[n] }' file.txt 

但它没有打印我想要的细节

回答

4

使用-F[]来设置多个字段分隔符。

awk -F '[|:= ]' '{print $14,"|",$4,$5}' file 

输出:

 
seattle | ip port1 
spokane | ip port2 
+0

我改变了输入一点(OPS后有一个空格)的输出是走出这样 'AB;城市| 1234 ip AB; city | 1234 ip' – jigsaw

+0

如果插入一个附加的字段分隔符,则输出也会更改。 – Cyrus

+0

是的,我只是改变了你的答案增加1,它的工作 – jigsaw