2つのファイルがあります(空白行/スペース/タブなし)
_aa
bb
cc
hello
SearchText.json
xyz.txt
_
_SearchText.json
_
そして私が望む最終出力は:(/ tmp/allからのすべての珍しい行)
_aa
bb
cc
hello
xyz.txt
_
私は以下のコマンドを試しました:-
_# comm -23 /tmp/required /tmp/all
_
_SearchText.json
_
_# comm -23 /tmp/all /tmp/required
_
_aa
bb
cc
hello
SearchText.json
xyz.txt
_
_# comm -13 /tmp/all /tmp/required
_
_SearchText.json
_
_# comm -13 /tmp/required /tmp/all
_
_aa
bb
cc
hello
SearchText.json
xyz.txt
_
_# grep -vf /tmp/all /tmp/required
_
_# grep -vf /tmp/required /tmp/all
_
_aa
bb
cc
hello
SearchText.json
xyz.txt
_
# comm -23 <(sort /tmp/all) <(sort /tmp/required)
_aa
bb
cc
hello
SearchText.json
xyz.txt
_
comm
の代わりに、 grep
を検討してください。
_grep -vxFf /tmp/required /tmp/all
_
これは、ファイル(_-v
_)/ tmp/requiredに(_-f
_)が存在しない/ tmp/all内の行を要求します。/tmp/all内の行が正規表現として解釈されないようにするために、「固定文字列」_-F
_フラグを追加しました。さらに、/ tmp/allの行全体を、/ tmp/requiredの行と一致させる必要があるため、_-x
_オプションを使用します。
この方法では、ソートされた入力は必要ありません。
「SearchText.json」行が両方のファイルで正確に一致した場合、comm -23 <(sort ...) <(sort ...)
コマンドが機能すると思われます(末尾のスペース(ある場合)。