使用bash以CSV格式向下移动列

时间:2017-01-11 19:05:38

标签: bash sorting csv

我在分号分隔的CSV文件中设置了以下数据:

"11-01-2017";"17:13";"X";"";...
"11-01-2017";"";"X";"17:32";...
"11-01-2017";"20:13";"Y";"";...
"11-01-2017";"";"Y";"20:25";...

如何在bash中将第二列中的每个条目向下移动1,从而产生:

"11-01-2017";"";"X";"";...
"11-01-2017";"17:13";"X";"17:32";...
"11-01-2017";"";"Y";"";...
"11-01-2017";"20:13";"Y";"20:25";...

在这种情况下,必须在条目周围留下双引号。

1 个答案:

答案 0 :(得分:4)

您可以将awk与这样的脚本一起使用:

<强> script.awk

BEGIN { FS = ";"
        OFS= FS
        prev2 ="\"\""
    }
    { tmp = $2; $2 = prev2; prev2 = tmp }

    1

运行方式如下:awk -f script.awk yourfile

  • 第一个块将输入和输出分隔符设置为;
  • 第二个块将第二列设置为上一行的值,并存储当前行的值
  • 最后一行中的1是打印当前值的简写