使用bash编辑csv文件中的字段

时间:2015-07-24 20:53:16

标签: bash csv awk

我有一堆需要"清理"的csv文件。 具体来说,有一个包含时间戳值的列,但有些行的值为' 1'代替。 我想做的是用最后一个有效(时间戳)值替换那些1,即将第i行的值替换为第i-1行的值。

我提供了文件样本

URL192.168.2.2,420042,20/07/2015 09:40:00,168430081,168430109
URL192.168.2.2,420042,20/07/2015 09:40:00,3232236038,3232236034
URL192.168.2.2,420042,                  1,168430081,168430109
URL192.168.2.2,420042,20/07/2015 09:40:01,3232236038,3232236034

因此,在此示例中,1必须替换为20/07/2015 09:40:00。我尝试使用awk,但无法确定它。

1 个答案:

答案 0 :(得分:0)

假设其他字段中没有逗号,那么这样的awk程序应该可以工作:

BEGIN { FS = OFS = "," }
$3!=1 { prev = $3 }
$3==1 { $3 = prev }
      { print }

警告:这是未经测试的代码。

第一行将字段分隔符设置为逗号,用于输入和输出。第二行保存第三个字段中具有时间戳的每一行的时间戳。第三行将最近保存的时间戳写入第三个字段中没有时间戳的每一行。第四行将每个输入行(无论是否已修改)写入输出。

让我知道你是怎么过的。