awk输入字段分隔符,并打印所有用双引号引起来的变量

时间:2019-06-21 12:00:48

标签: shell

我有一个格式为“ world,asia,india”的变量,变量的长度不是常数,并且会发生变化。我想要的是我要按如下所示格式化变量。

  

“世界”,“亚洲”,“印度”

echo $variable | awk 'BEGIN { OFS = "," } { $1 = $1; print }'

变量无变化

echo $variable | awk 'BEGIN { OFS = "," } { $1 = $1; print }'

变量无变化

输入:

  

“世界,亚洲,印度”
  “地球,世界,欧洲,法国”

输出:

  

“世界”,“亚洲”,“印度”

     

“地球”,“世界”,“欧洲”,“法国”

3 个答案:

答案 0 :(得分:0)

我不会通过修剪OFS来做到这一点,因为您仍然必须处理第一个字段和最后一个字段。只需遍历所有字段并用引号将它们括起来即可。直接:

awk -v q='"' 'BEGIN{FS=OFS=","}{for(x=1;x<=NF;x++)$x=q $x q}7'

上面的行可以解决问题。

答案 1 :(得分:0)

这看起来更像是搜索和替换问题,而不是字段分隔符问题:

awk '{gsub(/,/, "\",\""); print}'
# or
sed 's/,/","/g'

我假设您输入的内容实际上已经有前后引号,并且您只需要更改“内部”逗号即可。

答案 2 :(得分:0)

我真的很喜欢@Kent答案。

我建议我们可以允许awk$1=$1进行解析

 echo $variable | awk 'BEGIN{FS=",";OFS="\",\""}{$1=$1}1' 
相关问题