これを比較して同じ文字列があった場合にその文字列を抜き出すスクリプトを教えて下さい。
ファイル1
1
1
2
3
5
8
8
8
10
ファイル2
3
3
8
の場合に、出力結果が3と8が出力されるようなスクリプト(コマンド)を探しています。
commコマンドは知りませんでした。
参考になります。
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
色々な場合に応用できそうですね。
ありがとうございます。
( ( 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で消すと言うことですね。
ありがとうございました。
以下でどうでしょう。
cat <(sort ファイル1 | uniq) <(sort ファイル2 | uniq) | grep -v '^$' | sort | uniq -d
3番の方と同じ考え方ですが、grepを使うところが面白いですね。
ありがとうございました。
OS 等の情報を記載ください。
これまでの質問から UNIX・LINUX 環境での話かと思うのですが、
下記のコマンドでどうでしょうか。
cat ファイル1 | grep -f ファイル2 | sort -u
OSはLINUX環境になります。
grepの使い方がエレガントですね。
参考になりました。
commコマンドは知りませんでした。
参考になります。