如何解决Bash-如何将行转换为带引号的单行
给出上一条命令返回的值的列表:
ABC-55080
ABC-55060
ABC-55040
ABC-55035
ABC-55030
ABC-55025
ABC-55020
我想得到一个单行的引用值列表:
("ABC-55060","ABC-55040","ABC-55035","ABC-55030","ABC-55025","ABC-55020")
我尝试使用awk做到这一点:
cat input_list.csv | awk '{print}' ORS='","'
但是我得到的是列表中没有开头和结尾的引号:
ABC-55060","ABC-55020
如何实现呢?
解决方法
$ awk '{o=o s "\""$0"\""; s=","} END{print "(" o ")"}' file
("ABC-55080","ABC-55060","ABC-55040","ABC-55035","ABC-55030","ABC-55025","ABC-55020")
,
您可以尝试使用GNU awk
中显示的示例进行以下操作,编写和测试。在链接中编写和测试
https://ideone.com/zO1eYf
awk '
BEGIN{
s1="\""
OFS=","
}
FNR>1{
val=(val?val OFS:"")s1 $0 s1
}
END{
print "(" val ")"
}
' Input_file
说明: 在BEGIN
部分中,将变量s1的值设置为"
,并将输出字段分隔符设置为,
。然后,如果行大于1
,则进入主程序块检查条件,然后继续用该行的值添加到变量val中,并用s1
包装该行的值。在此程序的END
块中,在val值之前和之后分别添加(
和)
来打印val值。
要使用sed
时:
sed 's/.*/"&",/;1s/^/(/;$s/,$/)/' input_list.csv | tr -d "\n"
以输入文件为例,实际上您想处理流的输出时,可以使用
cat input_list.csv | xargs -I"{}" printf '"%s",' "{}" | sed 's/^/(/; s/,$/)\n/'
,
如果ed
可用/可接受。
#!/bin/sh
ed -s input_list.csv <<-'EOF'
g/./s/^/"/\
s/$/"/
1,$j
s/^/(/
s/,[[:space:]]$/)/,p
Q
EOF
- 如果要就地编辑文件,请将
Q
更改为w
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。