使用bash在CSV中向下移动列

使用bash在CSV中向下移动列,bash,sorting,csv,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-0

我在分号分隔的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";...

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

您可以将awk与以下脚本一起使用:

script.awk

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

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

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

回答得不错。但是,脚本似乎删除了要移动的第一个值上的双引号。这是我的输出:
“11-01-2017”;;“X”;"";... "11-01-2017";"17:13";“X”;"17:32";... "11-01-2017";"";“Y”;"";...@JamilSaid谢谢你的提示。我更新了答案。这个答案不认为输出需要第一条记录中的
”。@anubhava是的。最后一行中的原始值将被删除。在每个偶数记录的第二列中是否始终有