我有两个非常大的文件(每个超过900兆),格式为
email@address.tld:some_string:full name:location:contract_number
我需要使用字段1和amp;来自file_A(chk.forward.AUDIT.DATA.SET)的2作为与字段1和1匹配的模式。来自file_b(AUDIT.DATA.SET)的单行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
答案 0 :(得分: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中。