2016-02-24 41 views
1

我有一个文件如何用awk

A|B|C|D|E|F 

我需要输出像

"A","B","C","D","E","F" 

我没有打印值之间的报价:

awk -f'|' '{print $1,$2,$3}' 

这给了我输出只是空间。我的问题是如何获得逗号分隔的输出,报价,以及如何打印一次所有的值,而无需输入'{print $1,$2,$3......}'

我可以这样做:

awk -f'|' '{print """"$1""""","""""$2""""","""""$3""""..}' 

但它不工作。

回答

2

要指定字段分隔符,你必须使用-F代替-f;改变字段分隔符是什么输出,你必须改变OFS变量(输出字段分隔符)。

在你的领域中获得报价,你可以遍历所有领域,并将它们添加:

$ awk -F"|" -v OFS="," '{for (i=1; i<=NF; ++i){$i="\""$i"\""}}1' infile 
"A","B","C","D","E","F" 

另外,使用SED:

$ sed 's/\([^|]*\)/"\1"/g;y/|/,/' infile 
"A","B","C","D","E","F" 

这种环绕的非管所有字符序列与引号,然后用逗号代替所有管道。

+0

Thak你非常快速的答案。它效果很好。小写-f是错字从我身边:-) – Paul

-1

的awk -F “|” '{打印 “\” “$ 1” \ “ ”“ \ ”“ $ 2 ”\“, ”“ \ ”“ $ 3 ”\“”}'

+0

没有,@BenjaminW。输出中没有空格 – ClaudioM

+0

你说得对,对不起。但它仍然难以编码到三个领域。 –

+0

你是对的,你的解决方案更接近这一点 – ClaudioM

1

另一个awk

$ awk -F'|' -v OFS='","' -v q='"' '{$0=q $0 q; $1=$1}1' file 

"A","B","C","D","E","F" 

字段分离器是通过awk自动处理,只需要帮助的第一个和最后一个领域。同样地,

$ awk -F'|' -v OFS='","' -v q='"' '{$1=q $1; $NF=$NF q}1' file 

"A","B","C","D","E","F" 
1

惯用awk的解决方法是告诉AWK什么输入字段分隔符(FS)是你想要的输出字段分隔符(OFS)什么是再简单地更新一个字段,以便AWK将所有FSS到OFSs。

所以这可能是这样的:

$ awk -F'|' -v OFS='","' '{$1=$1; print "\"" $0 "\""}' file 
"A","B","C","D","E","F" 

或本:

$ awk -F'|' -v OFS='","' '{$1=$1; gsub(/^|$/,"\"")} 1' file 
"A","B","C","D","E","F" 

或@ karakfa的替代https://stackoverflow.com/a/35607361/1745001或者各种其他类似的解决方案。