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

Dav*_*ave 6 awk shell-script text-processing csv

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

 num_logins,day
 253,2016-07-01
 127,2016-07-02
Run Code Online (Sandbox Code Playgroud)

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

awk ' { t = $1; $1 = $2; $2 = t; print; } ' /tmp/2016_logins.csv 
Run Code Online (Sandbox Code Playgroud)

但是,结果输出相同的 . 我在上面的 awk 语句中缺少什么才能正确切换?

小智 7

干得好:

awk -F, '{ print $2 "," $1 }' sampleData.csv 
Run Code Online (Sandbox Code Playgroud)


ste*_*eve 6

因为默认分隔符是空格/制表符。不是逗号。获取您的原始代码,并添加一个-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
$
Run Code Online (Sandbox Code Playgroud)

将其剥离以{$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
$
Run Code Online (Sandbox Code Playgroud)

  • 设置 `OFS` 也可以在输出中获取逗号。 (4认同)