• 締切済み

リストファイルに一致する個数のカウントについて

以下にリストファイルと、インプットファイルがあります。 リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。 目的にかなうawkや perlなどのスクリプトを教えてほしいです。 list.txt a b c d ・・ input.txt 1 a b c 2 a d 3 4 b c ・・ output.txt a 2 b 2 c 2 d 1 ・・

みんなの回答

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

#2 です。 input.txt 1 a b c 2 a d a 3 ad 4 b c awk 'FNR==NR{a[o[n++]=$1]=0;next} {for (i=1;i<=NF;i++)if ($i in a)a[$i]++} END{for (i=0;i<n;i++)print o[i],a[o[i]]}' list.txt input.txt a 3 b 2 c 2 d 1 少し説明しとくと、a[] が list.txt の連想配列、o[] はその順序、n は行数 最初の FNR ブロックが list.txt に、次の {} が input.txt (以降複数ファイルでも) に対応、NF までの各項目ごとに a[] に一致する単語のカウント

hiroponsettu
質問者

お礼

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

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

特に明記されてないけど、空白区切りの完全一致ということなのかな? それと 2 a d a とかなってたら a のカウントは 2? それとも 1?

hiroponsettu
質問者

補足

カウントするようにしたいです。

  • okwavey2
  • ベストアンサー率15% (251/1593)
回答No.1

あなたが自分で出来るようにアドバイスして欲しいのではなくて、あなたの代わりに無料でやれという事でしょうか。

関連するQ&A

  • リストファイルと一致する行の抽出

    2つのファイルがありまして、list.txtでリストアップしたキーワードに一致するinput.txt一行目の行を抽出したいです. fgrep -f list.txt input.txt ではout of memoryで行えません。 他に何かいい方法がありませんでしょうか? あれば教えていただきたいです。 list.txtはsortせずにこの順序を維持したいです。 <list.txt> d c a h g x k . . <input.txt> a 12 43 .. b 29 44 .. c 12 66 .. c 33 55 .. d 44 55 ..

  • 3の倍数行まで1から数字を挿入し,カウントアップしていく方法

    よろしくお願いします.タイトル通り「3の倍数行まで1から数字を挿入し,カウントアップしていく方法」をテキストファイルで処理したいと思っています. 具体的にインプットとアウトプットは以下のようにしたいです. input.txt ----------------- a b c d e f g h i ・ ・ ・ ・ ・ output.txt ----------------- a,1 b,1 c,1 d,2 e,2 f,2 g,3 h,3 i,3 ・,4 ・,4 ・,4 ・,5 ・,5 perlでのファイルの読み込ませ方は理解していますので 読み込んで出力するまでの処理を教えていただけないでしょうか. よろしくお願いします.

    • ベストアンサー
    • Perl
  • 二つのファイルから条件に一致する行を抽出

    AとBの二つのファイルがあります。 Aの2列目3列目の間に存在するBの2列目のファイルを抽出してCのファイルを作成したいです。 awkのifでチマチマ作ればできるとは思うのですが、他に簡単にできる方法はないでしょうか? awkだけでなくperlやpythonなどでも問題ないです。 <A> A 10 20 B 30 40 C 50 70 D 90 110 <B> あ 15 い 25 う 55 え 75 お 95 <C> あ 15 う 55 お 95

  • awkでファイルから特定の行を抽出する方法

    初心者です。 ファイル(a.txt) 2005.12.05 2.5,1.0,a01 5.0,2.0,9.5 2005.12.06 6.5,4.0,3.2 b1,3.0,7.5 2005.12.07 ・ ・ というようなファイルから2、5、8・・・行目を 抜き出しファイル(b.txt)に「awk」又は「perl」で出力する方法を教えて下さい。

  • シェルスクリプトで複数ファイルを交互に操作する方法

    Bシェルのスクリプトで複数のファイルを交互に操作したいと考えています。 例えば、  A.txt   A   A  B.txt   B   B という2つのファイルがあったとして、これを交互に読み取り、  C.txt   A   B   A   B というファイルを作成したいと考えています。 現在は1行ごとに別ファイルを作成し、最後にそれをマージするという変な方法をとっています。 awkやperlを使用しないで、純粋にBシェルのスクリプトだけでスマートに実現するにはどのような方法がありますでしょうか。 よろしくお願いします。

  • awkで複数ファイルのある列を抽出し出力したい

    awkプログラミングの初心者です。 今、複数ファイル(1000ファイル)から、それぞれある列(すべて同じ列番号)のデータを抜き出して、1つのファイルに出力したいと考えています。 具体的には、1列目に共通項、2列目以降に1000ファイル分の抽出された列を、合計1001列となるような1つのファイルとして出力したいと考えております。 awkを使って出力するには、どのようなスクリプトを作ればよいか教えていただけませんでしょうか。 <イメージ> 元となるファイル(例えば下記のように3ファイル、実際には1000ファイル)があります。 file1.txt: 1  10 2  15 3  17 :  : 1000  25 file2.txt: 1  5 2  40 3  22 :  : 1000  17 file3.txt: 1  9 2  20 3  16 :  : 1000  32 出力後のファイルイメージ: 1  10  5  9 2  15  40  20 3  17  22  16 :  :  :  : 1000  25  17  32 ちなみに、自分で作成したawkスクリプト(下記)では、上記出力後のイメージとは異なり、 縦にデータが結合されてしまいました。 awk `{print $2}` ./file*.txt > Output.txt 出力後のファイル: 10 15 17 : 25 5 40 :

  • いくつかのファイルの一致を確認するプログラミングの作り方。

    いくつかのファイルの一致を確認するプログラミングの作り方。 例えば7個のtxtファイル a, b, c, d, e, f, g があるとします。 a, b, c, d, e, f, g はそれぞれのファイルのファイル名です。 そのうち、 a, b, g のファイルの内容が全く同じであった場合、 a, b, g は一致していると判断するには、どんなプログラムを作成すればよいのでしょう? ちなみにファイルの中身は 数字が配列のように並んでおり、文字数は5000文字程度です。

  • 2つのファイルを結合してファイルを出力する方法

    以下のような二つのファイルがあるとします。 1_input.csv: num,cap 1,A 2,B 3,C 4,D 5,E 2_input.csv: num,sma 2,a 2,b 4,c 5,d 5,e この2つのcsvファイルからnumを比較して同じ値の時に列を追加するような以下のファイルを作りたいです。 output.csv: num,sma,cap 2,a,B 2,b,B 4,c,D 5,d,E 5,e,E awkなどを使って一列目を比較してpasteで結合などを考えましたが知識不足でうまくできない状況です。どなたかご教授いただけませんでしょうか。よろしくお願いします。

  • awkを使って文字列処理の問題

    awkで以下のことをやりたいですが、 a.txtの中身は aaaa bbbb cccc の三つのレコードがあります。 b.txtの中身は 東京a 埼玉b 千葉c 東京d になってます。 ファイルa.txtのみっつのレコードのを読み込んできて、b.txtに対して検索して、東京 という文字列があれば、そのレコードは、aaaaに置き換えて、あるファイルに出力する ようなスクリプトを書きたいです。 どう書けば、いいですか?教えていただけませんか?

  • ある列をキーにして、複数行を1列で出力したい

    AWKで、以下の処理をしたいです。 ・1列目をキーにしたテーブルを作る ・1列目共通で2列目が複数ある場合は、並べて記載したい。 どなたか、スクリプト案お願いします。 例 Input file A あ B あ B い C い Output file A あ B あ/い C い