【发布时间】:2016-09-08 00:53:58
【问题描述】:
我有一个 .csv 文件,所有数据都在一个列中,并且在该数据中,它都是用竖线分隔的。
目前:
COLUMN A
info|info2|info3
我可以使用什么 bash 命令将每个命令分成一列?顶行包含标题。
例子:
COLUMN A, COLUMN B, COLUMN C
info, info2, info3
【问题讨论】:
-
标题是否也用管道分隔?
我有一个 .csv 文件,所有数据都在一个列中,并且在该数据中,它都是用竖线分隔的。
目前:
COLUMN A
info|info2|info3
我可以使用什么 bash 命令将每个命令分成一列?顶行包含标题。
例子:
COLUMN A, COLUMN B, COLUMN C
info, info2, info3
【问题讨论】:
假设您可以对列标题进行硬编码,请使用以下代码:
echo "COLUMN A, COLUMN B, COLUMN C" > out.csv && sed -e '1d;s/|/, /g' in.csv >> out.csv
例子:
$ cat in.csv
COLUMN A
info|info2|info3
$ echo "COLUMN A, COLUMN B, COLUMN C" > out.csv && sed -e '1d;s/|/, /g' in.csv >> out.csv
$ cat out.csv
COLUMN A, COLUMN B, COLUMN C
info, info2, info3
【讨论】:
你也可以在 awk 中试一试-
如果您的标题已经是 csv 格式-
awk -F "|" 'NR==1 { print $0} ; NR > 1 {print $1","$2","$3}' file.txt
对于第一行 (NR==1),它会打印出整行,其余的则以逗号分隔。
如果你的标题也是用管道分隔的,那就更容易了-
awk -F "|" ' {print $1","$2","$3}' file.txt
【讨论】: