我的文本文件中包含数字列,我需要将其转换为数字以'分隔的行,'
例如:
$ cat file.txt
1034008
1034043
10340431
1034051
然后我使用tr
:
tr "\n" "', '" < file.txt > file2.txt
但结果是:
$ cat file2.txt
1034008'1034043'10340431'1034051
那么,我需要做些什么来获得正确的结果呢?
答案 0 :(得分:5)
tr
只能进行一对一映射,而不是一对多
$ # convert all input lines to one line
$ # using , as separator, cannot give multiple character separator
$ paste -sd, ip.txt
1034008,1034043,10340431,1034051
$ # post process it
$ paste -sd, ip.txt | sed 's/,/, /g'
1034008, 1034043, 10340431, 1034051
$ # or use a tool that allows input record separator manipulation
$ perl -pe 's/\n/, / unless eof' ip.txt
1034008, 1034043, 10340431, 1034051
答案 1 :(得分:0)
1.我们可以通过sed做到这一点
sed的命令N
可以将下一行读入模式空间。所以我们使用N
将2行合并为1.但是如何将所有行合并为一个?
我们可以在开头设置一个lebel,并使用t label
跳转到lebel进行循环。
$ sed ':myLebel;N;s/\n/, /; t myLebel; ' file.txt > file2.txt
$ cat file2.txt
1034008, 1034043, 10340431, 1034051
2.在您的问题中,我们可以使用xargs
将所有内容读入由空格分隔的一行,然后使用sed
将空格替换为您想要的字符串。
$ cat file.txt | xargs |sed 's/ /, /g' > file2.txt
$ cat file2.txt
1034008, 1034043, 10340431, 1034051
参见:
How the 'N' command works in sed?
https://www.thegeekstuff.com/2009/12/unix-sed-tutorial-6-examples-for-sed-branching-operation/
答案 2 :(得分:0)
纯粹的bash,以避免外部命令(更快)
tk="$(< file.txt)"
echo "${tk//$'\n'/, }" > file2.txt