コマンドでファイル比較し、一致しないレコードを抽出する方法


【内容】  
コマンドにて、「IDを列挙しているファイル」と、「IDなどが記述されているcsv」を比較し  
csvから、「IDを列挙しているファイル」に記載されていないIDのレコードを抽出したいです。

【例】  
IDを列挙しているファイル（hogehoge_list）

[code]

    AAAAAA
    XXXXXX
    ZZZZZZ
    
[/code]

IDなど様々な情報が記述されているcsv(foofoo.csv)

[code]

    AAAAAA,タイトル,URL
    BBBBBB,タイトル,URL
    XXXXXX,タイトル,URL
    ZZZZZZ,タイトル,URL
    
[/code]

「hogehoge_list」と「foofoo.csv」を比較して、「hogehoge_list」にないIDである『BBBBBB』の「foofoo.csv」の行を取得したい。

[code]

    BBBBBB,タイトル,URL
    
[/code]

よろしくお願いします。



[code]

    join -t',' -v2 hogehoge_list foofoo.csv
    
[/code]

[`join`](https://linuxjm.osdn.jp/html/GNU_coreutils/man1/join.1.html) コマンドの
`-v` オプションを利用し、一列目で結合されなかった `foofoo.csv` の行のみを出力しています。両ファイルとも対象の列で
**ソートされている必要** があります。

ソートなども含めて書くと、例えば以下のようになります。

[code]

    #!/bin/sh
    
    # エラーで即時終了, > (リダイレクト)による上書き禁止
    set -eC
    
    # join コマンドのため、少なくとも一列目はソートされている必要がある
    LC_ALL=C sort hogehoge_list -t',' >delete_ids.txt
    LC_ALL=C sort foofoo.csv -t',' >all.csv
    
    LC_ALL=C join -t',' -v2 delete_ids.txt all.csv >out.csv
    
[/code]

