「account.txt」と「customer.txt」という2つのテキストファイルがあります。
**account.txt**
876251251
716126181
888281211
666615211
787878787
111212134
**customer.txt**
876251251
716126181
792342108
792332668
666615211
760332429
791952441
676702288
「account.txt」を「customer.txt」と比較する必要があります。
- すべてのアカウント番号がファイル
account.txt
に存在し、「アカウント番号」が見つからない場合は、欠落しているすべてのアカウント番号を印刷する必要があります。customer.txt
customer.txt
customer.txt
- そして、これらの追加の顧客番号はすべてファイル
customer.txt
にないので、account.txt
印刷したいと思います。
出力は次のようになります。
Missing Account Number:
888281211
787878787
111212134
Extra Customer Number:
792342108
792332668
760332429
791952441
676702288
Linuxでこれは可能ですか?私はこのように始めましたが、あなたが望む最初のケースでのみ機能し、2番目のケースではうまくいきませんか?また、上記の形式で出力を印刷する必要があります。
comm -23 account.txt customer.txt
メモ:これらのファイルには一部の文字列または空白行がある可能性があるため、文字列または空白行がある場合は比較から破棄する必要があります。重要な数字だけを比較してください。
ベストアンサー1
もう一つの簡単なオプションはcomm
;ソートされた入力のみが必要なので、「有効な口座番号」(すべての行に9桁の数字のみを含む)をフィルタリングしてクリーンな入力を提供し、新しいファイルにリダイレクトする前にそれをsortedにパイプすることです。
grep -Ex '[[:digit:]]{9}' account.txt | sort > account.txt.sorted
grep -Ex '[[:digit:]]{9}' customer.txt | sort > customer.txt.sorted
...次の指示に従って使用してくださいcomm
。
{ echo 'Missing Account Number:'; comm -23 account.txt.sorted customer.txt.sorted; }
{ echo 'Extra Customer Number:'; comm -13 account.txt.sorted customer.txt.sorted; }
与えられたサンプル入力:
アカウント.txt
garbage
876251251
716126181
888281211
666615211
666615211extra
787878787
111212134
extra
クライアント.txt
garbage
876251251
876251251extra
716126181
792342108
792332668
666615211
760332429
791952441
676702288
junk
結果の出力は次のとおりです。
Missing Account Number:
111212134
787878787
888281211
Extra Customer Number:
676702288
760332429
791952441
792332668
792342108