逗号分隔行的数据转置
我有一个文件,这个文件里有一列数据,总共有200行(200*1)。
我想把这些数据整理成一行,并用逗号分隔开。
示例文件
Paul
Pammy
Jacob
Robin
输出结果
Paul, Pammy, Jacob, Robin
6 个回答
2
这个看起来有效,它在Unix/Linux系统上使用了'tr'命令。
tr '\n', ',' < yourfile
4
awk
:
$ awk -v ORS=, 1 file.txt | sed 's/,$/\n/'
Paul,Pammy,Jacob,Robin
-v ORS=,
设置输出记录之间用,
分隔1
代表真,所以打印每一条记录sed 's/,$/\n/'
去掉结尾的,
sed
:
$ sed -n '1h;1!H;${g;s/\n/,/gp}' file.txt
Paul,Pammy,Jacob,Robin
-n
不输出内容1h
把第一行放到一个临时空间里1!H
把第二行到倒数第二行追加到临时空间${...}
对最后一行执行某些操作g
从临时空间中获取所有内容s/\n/,/g
把\n
替换成,
p
打印输出
tr:
$ tr '\n' ',' <file.txt | sed 's/,$/\n/'
5
使用 sed
:
sed ':a;{N;s/\n/, /};ba' INPUT_FILE
解释:
我不是 sed
的专家,但我来简单说说上面那行代码的意思:
:a
:label
命令创建了一个叫a
的标签。这个标签可以和ba
一起使用,跳转到这个标签的位置。这在创建循环和跳到脚本的最后部分打印当前的内容时很有用。N
N
命令会把下一行内容加到当前的内容后面,中间用\n
分隔。s/\n/, /
因为新的一行已经加到了当前内容中,并且用
\n
分隔,所以我们用这个替换命令把\n
替换成,
和一个空格,符合需求。
测试:
[jaypal:~/Temp] cat file
Paul
Pammy
Jacob
Robin
[jaypal:~/Temp] sed ':a;{N;s/\n/, /};ba' file
Paul, Pammy, Jacob, Robin