给定一个像这样的文件
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
是否有命令行实用程序可以转置内容,使输出看起来像这样
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
答案1
从https://stackoverflow.com/a/2776078:
$ apt-get install csvtool
然后转换
$ csvtool transpose input.csv > ouput.csv
或正在管道中
$ ... | csvtool transpose - | ...
答案2
仅使用 POSIX 工具不容易完成 CSV 解析,除非您使用不带引号的简化 CSV 变体(这样逗号就不会出现在字段中)。即便如此,使用awk
其他文本处理工具来完成这项任务似乎并不容易。您可以将 Perl 与Text::CSV
, Python 与csv
, R 与read.csv
, 红宝石与CSV,...(除 Perl 之外,所有这些都是各自语言标准库的一部分。)
例如,在Python中:
import csv, sys
rows = list(csv.reader(sys.stdin))
writer = csv.writer(sys.stdout)
for col in xrange(0, len(rows[0])):
writer.writerow([row[col] for row in rows])
答案3
ruby -rcsv -e 'puts CSV.parse(STDIN).transpose.map &:to_csv' < in.csv > out.csv
答案4
假设 CSV 文件是简单的CSV 文件,意味着没有字段包含嵌入的分隔符或换行符,您可以使用GNU 数据混合:
datamash transpose --field-separator=',' < input.csv