我有一个这种语法的文件:
foo:bar:value1,value2,value3,...:foo:bar
Run Code Online (Sandbox Code Playgroud)
我想得到没有固定长度的值列表(空格分隔):
value1 value2 value3 ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在单个awk命令中执行此操作?而不是像这样的管道命令:
awk -F: '{print $3}' myfile.txt | awk -F, '{OFS=" "; $1 = $1; print $0}'
Run Code Online (Sandbox Code Playgroud)
您可以使用 awk 的split()函数进行额外的拆分。
awk -F : '{ split($3, a, ","); print a[1], a[2], a[3] }' file
Run Code Online (Sandbox Code Playgroud)
如果您知道要获取csv分隔值的字段,那么您也可以使用gsub函数:
awk -F: '{gsub(/,/," ",$3);print $3}' file
Run Code Online (Sandbox Code Playgroud)
$ cat file
foo:bar:value1,value2,value3,value3:foo:bar
foo:bar:value1,value2:foo:bar
foo:bar:value1,value2,value3,value4,value5,value6:foo:bar
Run Code Online (Sandbox Code Playgroud)
$ awk -F: '{gsub(/,/," ",$3);print $3}' file
value1 value2 value3 value3
value1 value2
value1 value2 value3 value4 value5 value6
Run Code Online (Sandbox Code Playgroud)