使用bash在CSV中向下移动列
我在分号分隔的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
"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是的。最后一行中的原始值将被删除。在每个偶数记录的第二列中是否始终有“
?