2つの入力ファイルがあります
28a39a289906c01159f999a68996091a [email protected]
274d1d2c7e931fb55ac0c91dd41f2be7 [email protected]
44d25d3b1b70b240d5058f1be1cef576 [email protected]
2227a768f6d253b7bf81bb4ecb15b52d [email protected]
そして
28a39a289906c01159f999a68996091a
274d1d2c7e931fb55ac0c91dd41f2be7
44d25d3b1b70b240d5058f1be1cef576
2227a768f6d253b7bf81bb4ecb15b52d
ファイル2のファイル1に一致する列1を持つファイル1のすべての行を除外しようとしています。
md5阻害。
私が見つけることができるものawk 'NR==FNR{a[$1]=$0;next}{print a[$2]}' $1 $2
私はそれがかなり近いことを知っていますが、私が今やりたいことをする前に何をしたのかよくわかりません。
ベストアンサー1
順序が重要ではなく(たとえば、ファイルにmd5を含むすべての電子メールを除く)、awkが気に入らない場合は、次のようにします。join
:
join -v 1 -j 1 <(sort emails) <(sort excludes)
-v 1
2番目のファイル(除外)に、対応する行がない最初のファイル(電子メール)の行を印刷するように指示します。
-j 1
それぞれの最初の列のみを表示するように指示します。
awkを使用するには、次の作業が必要だと思います。
awk 'NF==1{exclude[$1]++} NF==2&&!exclude[$1]' excludes emails
または、2つのファイルが1行ずつ一致し、2行だけを除外する場合(たとえば、両方のファイルがその特定の行に同じハッシュがある場合)、次のように使用します。
awk 'NF==1{hash[FNR]=$1} NF==2&&hash[FNR]!=$1' excludes emails