Linuxで2つのファイルを比較し、片方のファイルに存在しない行を検出したいです。
ファイル1
aaa
ddd
ccc
ファイル2
aaa
bbb
ccc
ddd
eee
結果
bbb
eee
この場合、どのようなコマンドを実行すればよいでしょうか?
awkなどを使うのでしょうか・・・よく解らないので教えてください。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
commというコマンドを使います。
1.txtにだけ存在する行を表示する場合
comm -23 <(sort 1.txt) <(sort 2.txt)
2.txtにだけ存在する行を表示する場合
comm -13 <(sort 1.txt) <(sort 2.txt)
また、diffというコマンドを使えば二つのファイルにどういう
違いがあるのか、詳しく分かります。
diff 1.txt 2.txt
追記
commコマンドはファイルを事前にソートしておく必要がありました。
したがって、
comm -23 1.txt 2.txt
とするべきではありませんでしたので、訂正いたしました。
投稿2014/09/14 13:12
総合スコア198
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
awk でも sed でもなく、 ruby でスクリプトを書いてみました。
lang
1# -*- coding: utf-8 -*- 2# 1.txt, 2.txt を行単位で読み込んで、それぞれをソートし重複をとりのぞく。 3a = File.read('1.txt').lines.sort.uniq 4b = File.read('2.txt').lines.sort.uniq 5 6# a だけ または b だけに存在する要素を出力する。 7puts (a | b) - (a & b)
1.txt, 2.txt を質問文の内容に編集してから実行すると、次の出力が得られます。
bbb eee
無理矢理 コマンドライン 1 行で実行したいなら、次の様に指定できます。
ruby -e "a=File.read('1.txt').lines.sort.uniq;b=File.read('2.txt').lines.sort.uniq;puts (a | b) - (a & b)"
投稿2014/09/14 10:20
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。