如何使用awk打印值之间的引号

How to print quotes between value using awk

我有一个文件

A|B|C|D|E|F

我需要像

这样的输出
"A","B","C","D","E","F"

我做到了:

awk -f'|' '{print ,,}'

这给我的输出只有空格。我的问题是如何使用引号获得逗号分隔的输出,以及如何在不键入 '{print ,,......}'

的情况下一次打印所有值

我能做到:

awk -f'|' '{print """"""""","""""""""","""""""""..}'

但是不行。

要指定字段分隔符,您必须使用-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/\([^|]*\)/""/g;y/|/,/' infile
"A","B","C","D","E","F"

这会用引号将所有非竖线字符序列括起来,然后用逗号替换所有竖线。

awk -F"|" '{print "\""$1"\","""\""$2"\",""\""$3"\""}'

另一个awk

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

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

字段分隔符由 awk 自动处理,只需要第一个和最后一个字段的帮助。等价地,

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

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

惯用的 awk 解决方案是告诉 awk 输入字段分隔符 (FS) 是什么以及您希望输出字段分隔符 (OFS) 是什么,然后简单地更新一个字段,以便 awk 将所有 FS 转换为 OFS。

所以可能是这样的:

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

或者这个:

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

或@karakfa 的替代方案或其他各种类似的解决方案。