更改两个具有不同日期格式的文件
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
Awk 解释:
$ 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
我想使用 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
Awk 解释:
$ 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