Sed 削减开支;至第1栏及;从文件_A中选择2,并将其用作文件_B中的一行的模式和回显结果

Sed 削减开支;至第1栏及;从文件_A中选择2,并将其用作文件_B中的一行的模式和回显结果,sed,awk,grep,field,cut,Sed,Awk,Grep,Field,Cut,我有两个非常大的文件(每个超过900兆),格式为 email@address.tld:some_string:full name:location:contract_number 我需要使用文件_A(chk.forward.AUDIT.DATA.SET)中的字段1和2作为模式,以匹配文件_b(AUDIT.DATA.SET)中单行中的字段1和2。我愿意使用sed、awk、grep、cut或任何可以加速执行的东西 下面是我写得很糟糕的命令。我在这里有一个错误,创建了一个怪物大小的结果文件(比原始文

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

email@address.tld:some_string:full name:location:contract_number
我需要使用文件_A(chk.forward.AUDIT.DATA.SET)中的字段1和2作为模式,以匹配文件_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
读行时
;do grep$(echo$行| cut-d:-f2)AUDIT.DATA.SET
>/dev/null&&echo“审核通过帐户:$(echo$line | cut-d:-f1)转发:$(echo$line | cut-d:-f2)匹配OVD记录$(grep$(echo$line | cut-d:-f2)AUDIT.DATA.SET);| echo“审核失败帐户:$(echo$line | cut-d:-f1)转发:$(echo$line | cut-d:
-f2)不匹配$(grep$(echo$行| cut-d:-f2)AUDIT.DATA.SET)”;完成>restuls.txt

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

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

上面的行将所有匹配的结果保存在result.txt中。它查找文件\u b中的所有行,文件\u a中存在哪列1和哪列2。

您期望的输出是什么?您提到了2个文件,但只提供了一个文件的格式。它们就是格式。谢谢你问金肯特,谢谢你,我如何修改这一行来添加失败的匹配和回声匹配或不匹配?
awk-F:'NR==FNR{a[$1$2];next}$1$2在{print>“Matched”中;next}{print>“failed”'file_a file_b
试试这个。没有测试,但应该可以工作。希望。:D执行该行后,您有两个文件
匹配
失败
Kent,运行时出现错误。我想在输出到文件之前会抛出一个错误,因为未创建匹配和失败的文件。awk:源行的语法错误1上下文为>>@user2455949是缺少
}
。只需在
文件“failed”之后和
文件之前添加
}
。对不起,肯特,你在帮我。坏消息,看起来所有的文件都失败了。