更改两个具有不同日期格式的文件

change two files with different date format

我想使用 diff 命令比较两个文件。但是,由于两个文件中的日期格式不同,因此未进行比较

文件1

394|a101|2019-04-08 09:45:01|2019-04-08 09:45:01
389|a102|2019-04-08 09:46:02|2019-04-08 09:46:02

文件2

394|a101|20190408094501000000|20190408094501000000
389|a102|20190408094602000000|20190408094602000000

以上两个文件相同,只是日期格式不同。

我已尝试从字符串中删除连字符和冒号,然后进行比较,但相同的符号可能会出现在其他列中

请建议我如何比较这两个文件。 (日期列出现在文件中的任何位置)

总体思路:

  • 更好地优化您的数据源
  • 验证双方在 UTC 或同一时区工作

如何轻松做到:

纠正值 A 或值 B:

(这里是转换 A 的示例,因为当您可以锚定在 : 和 - 上时它更可靠)

cat filea|sed 's/\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\) \([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\)/00000/g'

输出:

394|a101|20190408094501000000|20190408094501000000
389|a102|20190408094602000000|20190408094602000000

示例片段:

#!/bin/bash
replacetime() { sed 's/\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\) \([0-9][0-9]\):\([0-9][0-9]\):\([0-9][0-9]\)/00000/g' ; } ;
cat FILEA | replacetime > /tmp/FILEA.tmp
diff /tmp/FILEA.tmp FILEB

使用 awk:

$ awk 'BEGIN{FS=OFS="|"}{for(i=3;i<=4;i++)if(gsub(/[^0-9]/,"",$i))$i=$i "000000"}1' file1 |
diff - file2

A​​wk 解释:

$ awk '
BEGIN{        
    FS=OFS="|"                    # set field separators
}
{
    for(i=3;i<=4;i++)             # fields 3 and 4
        if(gsub(/[^0-9]/,"",$i))  # remove non-digits
            $i=$i "000000"        # if any were removed, fill with zeroes
}1' file1                         # output

然后将输出通过管道传输到 diff:awk ... file1 | diff - file2