从前面的 csv 文件中移动特定列(按名称选择列)

use*_*413 3 command-line bash csv text-processing

考虑这个数据:

#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value, price
1, 3.21, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
EOL
Run Code Online (Sandbox Code Playgroud)

我想将“值”列移到前面:

value, price, group
3.21, 3.21, 1
3.42, 4.11, 1
3.5, 1.22, 1
4.1, 9.2, 2
4.2, 2.11, 2
Run Code Online (Sandbox Code Playgroud)

问题是:列的顺序(甚至列的数量或许多列的名称——除了始终存在的“值”)因文件而异。所以我必须按名称(而不是顺序)选择值列。

我怎样才能做到这一点?

abo*_*uso 8

与伟大的米勒 ( http://johnkerl.org/miller/doc ) 是很容易的

mlr --csv reorder -f " value, price,group" input.csv
Run Code Online (Sandbox Code Playgroud)

你有

 value, price,group
 3.21, 3.21,1
 3.42, 4.11,1
 3.5, 1.22,1
 4.1, 9.2,2
 4.2, 2.11,2
Run Code Online (Sandbox Code Playgroud)

请注意:我已经编辑了我的命令,考虑到问题 CSV 的字段名称中的空格

  • 我想赞成你的答案,因为它很简单,但它不起作用......我得到的输出与输入相同:-( (2认同)