Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何根据awk打印中的前缀获取字段?_Linux_Bash_Shell_Awk - Fatal编程技术网

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


@AvinashRaj
xsd: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