0

我有 2 个非常大的文件(每个文件超过 900 兆),格式为

email@address.tld:some_string:full name:location:contract_number

我需要使用 file_A (chk.forward.AUDIT.DATA.SET) 中的字段 1 和 2 作为与 file_b (AUDIT.DATA.SET) 的单行中的字段 1 和 2 匹配的模式。我愿意使用 sed、awk、grep、cut 或任何可以加快执行速度的东西。

下面是我写得不好的命令。我在这里有一个错误,正在创建一个怪物大小的结果文件(比原始文件大)。我确信有更好的方法来做到这一点。

while read line; do grep $(echo $line | cut -d: -f2) AUDIT.DATA.SET
>/dev/null && echo "AUDIT PASS ACCOUNT:$(echo $line | cut -d: -f1) FORWARD:$(echo $line | cut -d: -f2) MATCH OVD RECORD $(grep $(echo $line |cut -d: -f2) AUDIT.DATA.SET)" &  || echo "AUDIT FAIL ACCOUNT:$(echo $line | cut -d: -f1) FORWARD:$(echo $line | cut -d:
-f2) NO MATCH $(grep $(echo $line |cut -d: -f2) AUDIT.DATA.SET)"  ; done < chk.forward.AUDIT.DATA.SET >> restuls.txt
4

1 回答 1

2

假设您的两个文件具有相同的格式,正如您在问题中所解释的那样。您可以尝试使用 awk 的关联数组:

awk -F: 'NR==FNR{a[$1$2];next}$1$2 in a' file_a file_b > result.txt

上面的行会将所有匹配的结果保存在 result.txt 中。它查找file_b 中的所有行,其中column1 和column2 存在于file_a 中。

于 2013-06-05T15:08:35.927 回答