LoginSignup
1
0
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

差集合演算をshellで行う(aとbの差分のうちaのみに存在する要素を出力)

Posted at

差集合演算をshellで行う(aとbの差分のうちaのみに存在する要素を出力)

リレーショナルデータベースでいうEXCEPTをシェルコマンドで実現します。

SELECT id FROM a
EXCEPT
SELECT id FROM b;

それぞれa.txtb.txtに集合の中身が書かれているとします。ここで、a-ba.txtにはあるが、b.txtにはないもの)を出力するには、下記コマンドを実行します。

cat b.txt b.txt a.txt | sort | uniq -u

具体例

a.txt
aaa
bbb
cccc
dddd
txt.b.txt
cccc
dddd
ee
ff
aaa
bbb

より実践的な具体例

~/workディレクトリと~/backupディレクトリの差分を確認し、~/backup/されていないファイルを出力します。削除されたファイルは~/backup/にあっても良しとします。(この場合だったらrsync -av --dry-run ~/work/ ~/backup/でも良いのかも。)

cd ~/work
ls
# > aaa bbb cccc dddd
find . -type f > ../work_filelist.txt

cd ~/backup
touch cccc dddd ee ff
find . -type f > ../backup_filelist.txt

cat backup_filelist.txt backup_filelist.txt work_filelist.txt | sort | uniq -u >need_copy.txt

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0