1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイルbの行のうち、ファイルaに含まれない行を全部出力

Posted at
# a.txt に含まれているファイルを含めずに b.txt の中身を出力
grep -Fxvf a.txt b.txt

これだけです。今までこれを知らなかったので非常に面倒なことをやっていました。

例えば、a.txt に「実際に使用されているファイルのリスト」、b.txt に「プロジェクトに含まれているすべてのファイルのリスト」が入っているとします。b.txt の中で a.txt に含まれていないファイルを取り出して「不要なファイル」としてリスト化したい場合に便利です。

-F は固定文字列として検索するオプションです。
-x は完全に一致する行を検索します。
-v は除外オプションで、a.txt に含まれている行を b.txt から除外します。
-f a.txt で a.txt の行を検索条件として使い、結果を 

結果、b.txt の中で a.txt に含まれていない行だけが出力され、不要なファイルのリストが作成されます。

具体例

以下のような内容がファイルに含まれているとします:

a.txt(実際に使用されているファイルのリスト)
app/controllers/document_controller.py
app/controllers/file_packager.py
app/models/date_time_in_note.py
config/settings.py
scripts/main.py
b.txt(すべてのファイルのリスト)
app/controllers/document_controller.py
app/controllers/file_packager.py
app/models/date_time_in_note.py
config/settings.py
scripts/main.py
scripts/api_sample.py
tests/excel_style_diff.py
tests/profile_view.py

上記のコマンドを実行すると、b.txt にあるが a.txt に含まれていないファイルが出力されます:

$ grep -Fxvf a.txt b.txt
scripts/api_sample.py
tests/excel_style_diff.py
tests/profile_view.py

この方法で、b.txt の中で実際に使われていないファイルを確認することができます。


補足

以下でも同じことができます。

# ファイルをソートしてから比較
sort a.txt > a_sorted.txt
sort b.txt > b_sorted.txt

# a_sorted.txt にない行を出力(不要なファイルのリスト)
comm -23 b_sorted.txt a_sorted.txt > unnecessary_files.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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?