人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

2つのファイルにそれぞれ文字列が入っているのですが、
これを比較して同じ文字列があった場合にその文字列を抜き出すスクリプトを教えて下さい。

ファイル1
1
1
2
3
5
8
8
8
10

ファイル2
3
3
8

の場合に、出力結果が3と8が出力されるようなスクリプト(コマンド)を探しています。

●質問者: gatcch
●カテゴリ:はてなの使い方 コンピュータ
✍キーワード:コマンド スクリプト ファイル 文字列 比較
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● hujikojp
●30ポイント ベストアンサー

http://en.wikipedia.org/wiki/Comm

% comm -1 -2 aaa bbb
3
8
◎質問者からの返答

commコマンドは知りませんでした。

参考になります。


2 ● るびきち
●10ポイント

Rubyで。一方の行をハッシュのキーに格納し、他方の行がハッシュに含まれてるか調べる。

def compare(io1, io2)
 h = {}
 io1.readlines.each {|l| h[l] = true }
 result = []
 io2.readlines.each {|l| result << l if h.has_key? l }
 result.uniq
end

open(ARGV[0]) do |io1|
 open(ARGV[1]) do |io2|
 puts compare(io1, io2)
 end
end
◎質問者からの返答

色々な場合に応用できそうですね。

ありがとうございます。


3 ● syntaxerror
●20ポイント

( ( sort ファイル1 | uniq ) ; ( sort ファイル2 | uniq ) ) | sort | uniq -d

unix の sort と uniq を使えばできます。

実行結果

> cat file1

1

1

2

3

5

8

8

8

10

> cat file2

3

3

8

> ( ( sort file1 | uniq ) ; ( sort file2 | uniq ) ) | sort | uniq -d

3

8

>

◎質問者からの返答

なるほど、各ファイルからダブった部分を消してから

再度sortして重複した部分をuniqで消すと言うことですね。

ありがとうございました。


4 ● backupper
●25ポイント

以下でどうでしょう。

cat <(sort ファイル1 | uniq) <(sort ファイル2 | uniq) | grep -v '^$' | sort | uniq -d
◎質問者からの返答

3番の方と同じ考え方ですが、grepを使うところが面白いですね。

ありがとうございました。


5 ● Mook
●30ポイント

OS 等の情報を記載ください。


これまでの質問から UNIX・LINUX 環境での話かと思うのですが、

下記のコマンドでどうでしょうか。

cat ファイル1 | grep -f ファイル2 | sort -u

◎質問者からの返答

OSはLINUX環境になります。

grepの使い方がエレガントですね。

参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ