比较两个文本两个文件,其中一个包含带日期的列

比较两个文本两个文件,其中一个包含带日期的列

我有两个文本文件,其中之一包含:

...
2018-09-22   FFF1B976-9DDE-11E7-9C3D-6241D7D553BE
2018-09-27   682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
2018-09-27   682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049.bai
2018-09-27   6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049
2018-09-27   6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049.bai
...

而另一个包含:

...
CA9442F2-8C8C-11E7-8637-ABE8E6BF8454
ED3B2906-0117-11E8-BA0B-30D761F1560A
E9A927E4-8B9B-11E7-9435-18B114A47675
373667F0-8B93-11E7-B918-13B114A47675
15D861C4-BB82-11E8-A989-7D57C505C2C3
...

我想要实现的是将一个与另一个进行比较并仅显示超过 30 天的行。

答案1

您可以使用 GNU 工具查找超过 30 天的行:

awk -v month_ago="$(date -d '30 days ago' '+%F')" '
    NR == FNR {ids[$1]; next}
    $1 < month_ago && $2 in ids
' small_file big_file

首先读取小文件(当 NR == FNR 时),将值存储在数组中。
然后,对于大文件中的行,其中日期早于 30 天并且第二个字段已出现在较小的文件中,请打印该行。

相关内容