Linux 如何根据awk打印中的前缀获取字段?
我有一个包含以下数据的文件:Linux 如何根据awk打印中的前缀获取字段?,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我有一个包含以下数据的文件: toto,1,xsd:integer titi,true,xsd:boolean tata,str,attr,xsd:string 事实上,每行的格式为: parameter_name,value,...,xsd:type 参数_的名称是fix,它位于位置1。该值也是固定的,位于位置2。但是类型位置是可变的,它可以在除位置2和1之外的任何位置。但是类型字段始终包含前缀xsd 现在,我尝试执行一个awk,只提取参数名、值和类型。 目前,我可以使用 awk -F",
toto,1,xsd:integer
titi,true,xsd:boolean
tata,str,attr,xsd:string
事实上,每行的格式为:
parameter_name,value,...,xsd:type
参数_的名称是fix,它位于位置1。该值也是固定的,位于位置2。但是类型位置是可变的,它可以在除位置2和1之外的任何位置。但是类型字段始终包含前缀xsd
现在,我尝试执行一个awk,只提取参数名、值和类型。
目前,我可以使用
awk -F"," '{print $1"-"$2}'
但是我无法提取类型字段,因为它的位置是可变的。如何根据
awk
输出中的前缀xsd
获取类型字段?在其余字段上循环查找前缀
awk -F, '{type="";
for (i = 3; i <= NF; i++) { if($i ~ /^xsd:/) { type = $i; break; } }
print $1"-"$2"-"type; }'
awk-F,“{type=”“;
对于(i=3;i您可以尝试此GNU-sed命令
$ sed -r 's/^([^,]*),([^,]*),.*(xsd:[^,]*).*/\1,\2,\3/g' file
toto,1,xsd:integer
titi,true,xsd:boolean
tata,str,xsd:string
或
@AvinashRajxsd:integer
是第一行的类型awk'…您的东西…;myType=$0;sub(/.*xsd:/,“”,type);print myType
…?祝你好运。如果行中没有xsd:type怎么办?我认为它会打印错误的类型。我认为应该在awk中启动该类型。不是吗?我在循环之前添加了一个初始值。谢谢你的回答
$ sed -r 's/^([^,]*),([^,]*),.*(xsd:[^,]*).*/\1-\2-\3/g' file
toto-1-xsd:integer
titi-true-xsd:boolean
tata-str-xsd:string