我在文本文件中有以下列表:
10.1.2.200
10.1.2.201
10.1.2.202
10.1.2.203
我想包含“双引号”,逗号分隔并将值作为一个字符串连接。
可以用sed或awk完成吗?
预期产出:
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203","10.1.2.204"
答案 0 :(得分:3)
最简单的是这样的(伪代码):
根据语言的不同,这很简单:
使用awk
:
$ awk 'BEGIN{OFS=","}{s=s ? s OFS "\"" $1 "\"" : "\"" $1 "\""} END{print s}' file
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
或者,更少'引号墙'来定义引号字符:
$ awk 'BEGIN{OFS=",";q="\""}{s=s ? s OFS q$1q : q$1q} END{print s}' file
使用sed
:
$ sed -E 's/^(.*)$/"\1"/' file | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g'
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
(使用Perl和Ruby,使用join
函数,最简单的方法是将元素推送到堆栈然后加入。)
的Perl:
$ perl -lne 'push @a, "\"$_\""; END{print join(",", @a)}' file
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
红宝石:
$ ruby -ne 'BEGIN{@arr=[]}; @arr.push "\"#{$_.chomp}\""; END{puts @arr.join(",")}' file
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
答案 1 :(得分:1)
这是另一种选择
sed 's/.*/"&"/' file | paste -sd,
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
答案 2 :(得分:0)
awk -F'\n' -v RS="\0" -v OFS='","' -v q='"' '{NF--}$0=q$0q' file
应该适用于给定的例子。
用gawk测试:
kent$ cat f
10.1.2.200
10.1.2.201
10.1.2.202
10.1.2.203
kent$ awk -F'\n' -v RS="\0" -v OFS='","' -v q='"' '{NF--}$0=q$0q' f
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"
答案 3 :(得分:-2)
$ awk '{o=o (NR>1?",":"") "\""$0"\""} END{print o}' file
"10.1.2.200","10.1.2.201","10.1.2.202","10.1.2.203"