这是实际的文件数据:
abc
def
ghi
jkl
mno
并且所需的输出应采用以下格式:
'abc','def','ghi','jkl','mno'
我用来执行此操作的命令给出的输出为:
abc,def,ghi,jkl,mno
命令如下:
sed -n 's/[0-3]//;s/ //;p' Split_22_05_2013 | \
awk -v ORS= '{print $0" ";if(NR%4==0){print "\n"}}'
为了回应 sudo_O 的评论,我awk
在纯 bash 中添加了一个较少的解决方案。它根本不执行任何程序。当然,<<XXX ... XXX
可以添加<filename
.
set c=""
while read w; do
echo -e "$c'$w'\c"
c=,
done<<XXX
abc
def
ghi
jkl
mno
XXX
输出:
'abc','def','ghi','jkl','mno'
更短的版本:
printf -v out ",'%s'" $(<infile)
echo ${out:1}
没有可怕的管蛇你可以尝试这样的事情:
awk 'NR>1{printf ","}{printf "\x27%s\x27",$0}' <<XXX
abc
def
ghi
jkl
mno
XXX
输出:
'abc','def','ghi','jkl','mno'
或将整个输入读取为一行的其他版本:
awk -vRS="" '{gsub("\n","\x27,\x27");print"\x27"$0"\x27"}'
或者让 awk 更多地使用内部变量的版本
awk -vRS="" -F"\n" -vOFS="','" -vORS="'" '{$1=$1;print ORS $0}'
$1=$1;
需要告诉 to使用新字段和记录分隔符 ( , )awk
重新打包。$0
OFS
ORS
$ cat test.txt
abc
def
ghi
jkl
mno
$ cat test.txt | tr '\n' ','
abc,def,ghi,jkl,mno,
$ cat test.txt | awk '{print "\x27" $1 "\x27"}' | tr '\n' ','
'abc','def','ghi','jkl','mno',
$ cat test.txt | awk '{print "\x27" $1 "\x27"}' | tr '\n' ',' | sed 's/,$//'
'abc','def','ghi','jkl','mno'
最后一条命令可以缩短以避免UUOC:
$ awk '{print "\x27" $1 "\x27"}' test.txt | tr '\n' ',' | sed 's/,$//'
'abc','def','ghi','jkl','mno'
sed
单独使用:
sed -n "/./{s/^\|\$/'/g;H}; \${x;s/\n//;s/\n/,/gp};" test.txt
编辑:已修复,它现在应该也可以使用或不使用空行。
$ cat file
abc
def
ghi
jkl
mno
$ cat file | tr '\n' ' ' | awk -v q="'" -v OFS="','" '$1=$1 { print q $0 q }'
'abc','def','ghi','jkl','mno'
这可以用 sed 和 paste 简单地完成:
<infile sed "s/^\|\$/'/g" | paste -sd,
或者更便携(我认为,现在无法测试):
sed "s/^\|\$/'/g" infile | paste -s -d , -
$ sed "s/[^ ][^ ]*/'&',/g" input.txt | tr -d '\n'
'abc','def','ghi','jkl','mno',
要清洁鞋楦,
,放入一个
| sed 's/,$//'
awk 'seen == 1 { printf("'"','"'%s", $1);} seen == 0 {seen = 1; printf("'"'"'%s", $1);} END { printf("'"'"'\n"); }'
以更易读的格式(适用于awk -f
):
# Print quote-terminator, separator, quote-start, thing
seen == 1 { printf("','%s", $1); }
# Set the "print separator" flag, print quote-start thing
seen == 0 { seen = 1; printf("'%s", $1}; }
END { printf("'\n"); } # Print quote-end
perl -l54pe 's/.*/\x27$&\x27/' file