我有一个input.txt
,其中包含这样的数据
123
1234
1223
我希望它转换为另一个文件output.txt
,文件应该如下所示
'123','1234','1223'
有人可以告诉我如何在unix中完成它吗?
答案 0 :(得分:2)
你可以试试这个,
tr -s '\n' < input.txt | sed "s/.*/'&'/g" | tr '\n' ',' | sed 's/,$//g' > output.txt
答案 1 :(得分:0)
您可以使用sed
cat input.txt | sed -n "s!\(.*\)!'\1'!;H;\$!b;x;s!^\n!!;s!\n!,!g;p"
读取每一行(默认情况下不打印-p
),然后将其附加到保留空间H
- 然后停止除最后一行\$b
以外的所有行。
在最后一行 - 将保留空间复制到模式空间x
中,抛弃第一个换行符(保留空间中有一个换行符开头),然后用','替换剩余的换行符。最后打印出模式空间p
。
您可以使用perl脚本
#!/usr/bin/perl
my @lines = <>;
chomp(@lines);
print join(',', map { "\"$_\"" } @lines), "\n";
./script input.txt
答案 2 :(得分:0)
我害怕我不能用bash。在Python中试试这个:
InputFilepath = /path/to/input.txt
OutputFilepath = /path/to/output.txt
with open(InputFilepath, "r") as f:
words = f.read().splitlines() #may be not needed?
result = ','.join(f)
with open(OutputFilepath, "w") as g:
g.write(result)
答案 3 :(得分:0)
我敢打赌,有一种更清洁的方法可以做到这一点,但到目前为止还无法想到它。
# 1 2 3 4
sed "/^[ \t]*$/d; s/\(.*\)/'\1'/" input.txt | tr "\n" "," | sed 's/,$//'
答案 4 :(得分:0)
这是awk
版本
awk 'NF{s=s q$0q","} END {sub(/,$/,x,s);print s}' q="'" file
'123','1234','1223'
工作原理:
awk '
NF { # When line is not blank, do:
s=s q$0q","} # Chain together all data with ' before and ',
END { # End block
sub(/,$/,x,s) # Remove last ,
print s} # Print the result
' q="'" file # Helps awk to handle single quote in print, and read the file
答案 5 :(得分:0)
使用GNU awk进行多字符RS:
$ awk -v RS='\n+$' -v FS='\n+' -v OFS="','" -v q="'" '{$1=$1; print q $0 q }' file
'123','1234','1223'
它只是将整个文件读作一条记录(RS='\n+$'
),使用连续换行符序列作为输入字段分隔符(FS='\n+'
),然后使用','
作为输出字段重新编译记录分隔符(OFS="','"
)通过为自身分配一个字段($1=$1
),并在前面和后面打印一个'
的结果。