我正在使用 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