• 締切済み

シェルスクリプトの制御構文について

いつもお世話になっております。 当方、RHELで bashシェルを使用しており、制御構文を用いて 『 file1.txt にある数値が file2.txt に含まれているかどうか、また、いくつ含まれているかカウント』するスクリプトを作りたいと思っております。 ファイルの中身は下記のようになっています。 [file1.txt]       [file2.txt] 10250         10064     10298         10250 11674         12866 13298         13119 28952         13201 34966         13298 37641         37641         上記の例であれば、10250,13298,37641 が共通のものなので その数 3 というものを求めたいのです。 while文やfor文を用いて繰り返し処理をするのでは、と思い調べてはみたのですが 知識が乏しく構文を書くことが出来ませんでした。 また、PerlやRuby等使わず、シェルスクリプトのみで実行したいです。 勉強不足でとても初歩的なことを伺っているとは重々承知ですが、 どなたかお力を貸していただけないでしょうか。 宜しくお願いいたします。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

ソート済みの2ファイルの共通部分を取るのはcommコマンドで出来ます。 comm -12 file1.txt file2.txt | wc -l ファイルがソートされてないのなら、ソートしてから処理します。 comm -12 <(sort file1.txt) <(sort file2.txt) | wc -l

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

> その数 3 というものを求めたいのです それだけなら fgrep -f file1.txt file2.txt | wc -l とかだけど。制御構文とか関係なく。

関連するQ&A

  • シェルスクリプトのbashとperlについて

    シェルスクリプトのbashとperlについて 今さら気づいたのですが、PerlもUNIXのコマンドやシェルスクリプトとして使用できるということでしょうか。 RubyやPHPをUNIXのコマンドやシェルスクリプトとして使用することはできますでしょうか。 学ぶとしたら、bashとPerlのどちらが良いでしょうか。 また、シェルスクリプトはどんな用途や利点がありますでしょうか。 Webアプリケーションによるバックアップやログをタイマーでセットして自動的に取得したりすることは可能でしょうか。

  • シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2

    シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。 当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。 つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。 こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。 また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。 Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

  • シェルスクリプト間で排他をとりたい

    環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

  • シェルスクリプト

    while文のシェルスクリプトでエラーが出て困っています。 どうすればいいでしょうか? 回答の程宜しくお願い致します。 #!/bin/bash count=1 while[$count -le 5] do touch "y$count" ls -l "y$count" coun ='expr $count+1' done [root@Linux root]# . makefile bash: while[1 -le 5]: command not found bash: makefile: line 4: syntax error near unexpected token `do' bash: makefile: line 4: `do'

  • シェルスクリプト+perl

    シェルスクリプト中で1行だけperlを利用したいと思っています。 しかしシェルスクリプトで利用している変数をperlに持っていく方法が分からず悩んでいます。 ---------------------- #!/ban/bash hoge="hogehoge" perl -e ・・・ ←この中で$hogeを利用したい ---------------------- perlですべて書き直せばできるのですが、1行のためだけに、すべてを修正するのもどうかと思いましたので質問させていただきました。 もしご存知の方いらっしゃいましたらお教えください。

  • シェルスクリプト

    2月14日頃質問のあった”UNIXのシェルスクリプトを使用してテキストファイルのある列にある特定の文字列を条件としてその行を出力するということをやりたい”を下記のように作ってみました。問題ないか逆質問の形で投稿します。(ルール違反かもしれませんが質問が締め切られているので・・・) #!/bin/bash CAT=YAHOO while read LINE do echo $LINE > tmp.txt DOG=`cut -d" " -f2 tmp.txt` if [ "$CAT" = "$DOG" ] then echo "$LINE" fi done < catalog.file

  • シェルスクリプトの作り方

    OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • シェルスクリプトに関する質問です

    シェルスクリプトに関する質問です 以下のようなシェルスクリプトを書きたいのですが,難しくて出来無いのでどなたか ご協力お願いします。 foldaという名前のフォルダの中に1~100のフォルダがある. それら100個のフォルダの中に,それぞれfile.txtというテキストファイルがあり,これには 112.73 のように小数点ありの数字が1行書かれている. このfile.txtの内容を全て読み取って,それら100個分のデータを 1つのファイルに出力するスクリプト スクリプトファイルはfoldaの中にあるものとする. よろしくお願いします.

  • bashスクリプトの中の rubyプログラムでシェル変数を参照したい

    Windows XP で Cygwin, ruby を使っています。 bashスクリプトの中の ruby プログラムで シェル変数を参照したいのですが どうしたらよいでしょうか? 例: abc = "qwerty" ruby -e ' #ここでシェル変数 abc を参照したい '