如何根据awk打印中的前缀获取字段?

时间:2014-06-19 17:36:38

标签: linux bash shell awk

我有一个包含以下数据的文件:

toto,1,xsd:integer
titi,true,xsd:boolean
tata,str,attr,xsd:string

实际上每行的格式是:

parameter_name,value,...,xsd:type

参数名称是固定的,它位于位置1.该值也是固定的,它位于位置2.但是类型位置是可变的,它可以在除位置2和1之外的任何位置。但是类型字段总是包含前缀xsd

现在我试图执行一个awk来只提取参数名称,值和类型。 目前我能够用

提取参数名称和值
awk -F"," '{print $1"-"$2}'

但我无法提取类型字段,因为它的位置是可变的。如何根据xsd输出中的前缀awk获取类型字段?

2 个答案:

答案 0 :(得分:1)

遍历其余字段以查找前缀。

awk -F, '{type="";
          for (i = 3; i <= NF; i++) { if($i ~ /^xsd:/) { type = $i; break; } }
          print $1"-"$2"-"type; }'

答案 1 :(得分:0)

你可以试试这个GNU sed命令,

$ sed -r 's/^([^,]*),([^,]*),.*(xsd:[^,]*).*/\1,\2,\3/g' file
toto,1,xsd:integer
titi,true,xsd:boolean
tata,str,xsd:string

OR

$ sed -r 's/^([^,]*),([^,]*),.*(xsd:[^,]*).*/\1-\2-\3/g' file
toto-1-xsd:integer
titi-true-xsd:boolean
tata-str-xsd:string