ファイルが2つあります。ファイルA&文書B
fileAには多くのIPがあり、fileBには少ないIPがあります。私たちは何をすべきですか?
fileA - fileB = fileC (パブリック IP を持たないファイル)
ファイルA
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
文書B
4.4.4.4
1.1.1.1
ファイルC
2.2.2.2
3.3.3.3
5.5.5.5
Google には多くのオプションがありますが、関連項目が見つかりません。
答え1
このcomm
ツールは、特に英数字でソートされた結果に興味がない場合に便利です。
comm -23 <( sort -u fileA ) <( sort -u fileB ) >fileC
使用方法の詳細については、およびman sort
を参照してください。man comm
答え2
これにはfileA - fileB
awkを使用できます(これを行うとIPだけを取得できませんfileB
)。
awk 'NR==FNR{a[$0];next}!($0 in a)' fileB fileA
NR
合計レコード数を表し、FNR
現在のファイルのレコード番号(通常行番号)を示します。したがって、最初のファイルに行がある場合、2番目のファイルには表示されません。
fileA から重複行を削除する必要がある場合は、次のようにします。
awk 'NR==FNR{a[$0]++;next}!a[$0]++' fileB fileA
答え3
この質問はさまざまな方法で説明できます。
各行はそのファイル内で一意であると仮定します。
fileA
にある項目を削除するとしますfileB
。fileB
これにより、次に見つかったIPアドレスが削除されますfileA
。grep -v -Fx -f fileB fileA >fileC
ここで使用されているオプションは、
grep
パターン(fileB
usingから読み取られた行-f
)が正規表現(-F
)ではなく文字列として扱われ、部分文字列()ではない行全体と一致することを確認します-x
。また、一致の意味を変更して、どの行とも一致しないすべての行を-v
出力します。fileA
fileB
独自のすべてのアイテムを取得したいとしましょう。
fileA
または独自の機能は次のとおりですfileB
。次の出力ファイルに重複しない行があります。非標準ですが、後続の行で繰り返されない線を出力するためによく使用されるオプションである
-u
withを使用します。uniq
sort fileA fileB | uniq -u >fileC
答え4
順序を維持することが重要でない場合は、まず最初のファイルから重複エントリを削除し、次に出力を2番目のファイルと2回リンクし(固有のエントリを削除するため)、次にuniq -u
.
sort -u fileA | cat - fileB fileB | sort | uniq -u