交换 CSV 文件中的第一列和第二列

交换 CSV 文件中的第一列和第二列

我正在使用 bash。我有一个包含两列数据的 CSV 文件,大致如下所示

 num_logins,day
 253,2016-07-01
 127,2016-07-02

我想交换第一列和第二列(使日期列成为第一列)。所以我尝试了这个

awk ' { t = $1; $1 = $2; $2 = t; print; } ' /tmp/2016_logins.csv 

但是,结果输出相同。为了让事情正确切换,我在上面的 awk 语句中缺少什么?

答案1

干得好:

awk -F, '{ print $2 "," $1 }' sampleData.csv 

答案2

因为默认分隔符是空格/制表符。不是逗号。采取你的原始代码,并添加一个-F,解决方案。

$ awk -F, ' { t = $1; $1 = $2; $2 = t; print; } ' /tmp/2016_logins.csv
day num_logins
2016-07-01  253
2016-07-02  127
$

将其剥离以{$0=$2" "$1}1获得相同的结果。

$ awk -F, '{$0=$2" "$1}1' /tmp/2016_logins.csv
day num_logins
2016-07-01  253
2016-07-02  127
$

答案3

这个答案使用xsv而不是awk, 但如果您有很多列,则很有用:

xsv cat columns <(xsv select 1-4,6- input.csv) <(xsv select 5 input.csv) > output.csv

相关内容