是否有命令行实用程序来转置 csv 文件?

Cor*_*ein 26 text-processing csv

给定一个像这样的文件

First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
Run Code Online (Sandbox Code Playgroud)

是否有命令行实用程序来转置内容,以便输出看起来像这样

First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
Run Code Online (Sandbox Code Playgroud)

Grz*_*cki 23

/sf/answers/194325491/

$ apt-get install csvtool
Run Code Online (Sandbox Code Playgroud)

然后转换

$ csvtool transpose input.csv > ouput.csv
Run Code Online (Sandbox Code Playgroud)

或在管道中

$ ... | csvtool transpose - | ...
Run Code Online (Sandbox Code Playgroud)

  • 美丽的。只有`... | csv转置| ...` 会打败它,语法方面。 (2认同)

Gil*_*il' 17

CSV 解析不能仅使用 POSIX 工具轻松完成,除非您使用的是不带引号的简化 CSV 变体(以便逗号不能出现在字段中)。即使这样,使用 awk 或其他文本处理工具似乎也不容易完成这项任务。您可以将 Perl 与Text::CSV、Python 与csv、R 与read.csvRuby 与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])
Run Code Online (Sandbox Code Playgroud)


小智 9

ruby -rcsv -e 'puts CSV.parse(STDIN).transpose.map &:to_csv' < in.csv > out.csv
Run Code Online (Sandbox Code Playgroud)

  • 考虑到这个问题的年龄,我将证明我对此的更改是可接受的:a)这个答案比 Gilles 的“python”简洁得多,b)“ruby”的可移植性并不比“python”差,c)这个还展示了如何传递输入/输出文件。太棒了@luikore,欢迎来到 Unix 和 Linux。请留下来。 (2认同)