0

次のようにフォーマットされた 2 つの非常に大きなファイル (それぞれ 900 MB 以上) があります。

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 行でフィールド 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

問題で説明したように、2つのファイルが同じ形式であると仮定します。awkの連想配列で試すことができます:

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

上記の行は、一致したすべての結果をresult.txtに保存します。file_a に存在する column1 と column2 のすべての行を file_b で検索します。

于 2013-06-05T15:08:35.927 に答える