如何从多行的 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
所以我需要编写一个脚本来重新排列一个 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