如何从多行的 csv 文件中获取特定列?

How can I get specific columns from a csv file that has multiple lines?

所以我需要编写一个脚本来重新排列一个 csv 文件并将其输出到另一个文件中。我有一个看起来像这样的 csv 文件:

name1, surname1, haircolor1
name2, surname2, haircolor2
name3, surname3, haircolor3

我需要做到这一点,以便获得以下内容:

haircolor1, name1
haircolor2, name2
haircolor3, name3

我试过弄乱 awk,但它只列出了第一列,然后是第二列,依此类推。 如果对此有任何意见,我将不胜感激!

你可以试试这个。

awk -F, '{print ","}' foo.csv
  • foo.csv是你要处理的csv文件
awk -F, -v OFS=, '{print ,}'

如果导致前导白异常space,可以试试:

awk -F '[[:space:],]+' -v OFS=, '{print ,}'

以白色space 和逗号分隔列。

  • print ,表示打印字段3和1,由输出字段分隔符(OFS)分隔。
  • 如果你想保持前导白色space,你可以设置OFS=', '

您可以使用csvcut

$ csvcut -c ' haircolor1,name1' file
 haircolor1,name1
 haircolor2,name2
 haircolor3,name3

如果对齐有问题,您可以通过管道传递到 sed

$ csvcut -c ' haircolor1,name1' file | sed 's/,/& /g;s/^ //'
haircolor1, name1
haircolor2, name2
haircolor3, name3

或者,使用sed分组

$ sed  's/\([^,]*\),[^,]*,\s\(.*\)/, /' file
haircolor1, name1
haircolor2, name2
haircolor3, name3

使用 Miller 和 运行

mlr --csv -N cut -o -f 3,1 input.csv

你将拥有

 haircolor1,name1
 haircolor2,name2
 haircolor3,name3