• 締切済み

バッチファイル、awkスクリプトの作成について

nightowlの回答

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.4

前の回答を読み返してみて我ながら不親切だと思ったので、 awk でのサンプルを示します。でも awk でソートなどするのは面倒ですよ。 このプログラムのソートも半分インチキです。 asort() という関数もありますが gawk(GNU awk)の独自拡張だし。 すべてにおいて awk がベストの解ではありません。 統計なら Excel を使ってもいいし。 スクリプト言語で全部賄う必要があるなら、ここはもう Perl や Ruby などの出番だと個人的には思います。 { while (getline) { if (!/EOS/) { # 句読点をはねたいときはここに追加 freq[$0]++ lineno++ if (freq[$0] > maxfreq) maxfreq = freq[$0] } } } END { for (i = maxfreq; i > 0; i--) # 昇順にするにはここを書き換え for (line in freq) if (freq[line] == i) printf("%10d(%.3g%%) %s\n", freq[line], 100*freq[line]/lineno, line) } 茶筅の出力をパイプでこのスクリプトに食べさせてください。 後はこれを叩き台にして頑張ってください。

参考URL:
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/awk/intro/,http://infoshako.sk.tsukuba.ac.jp/jdoc/GNU/AWK/jgawk-jman/

関連するQ&A

  • AWKスクリプトについて

    AWKスクリプトで あるファイルの中の3単語目の最大文字数を表示させたくて以下のようなスクリプトを作成しました。 #!/bin/nawk -f BEGIN{ maxword = 0; } { if( length( $3 ) > $maxword ) maxword = length( $3 ); } END{ print $maxword; } 単純なスクリプトなのですが, テストしてみると空白の出力しかされません。 なにか間違っているのでしょうか? どなたかアドバイスをお願いします。

  • AWKスクリプト作成法 その3

    AWKスクリプトで以下のようなことをやりたいのですが どのようなすればできるでしょうか? いい方法を教えてもらえないでしょうか? 入力ファイル例 LAYER部 LAYER AAPOL 10 LAYER ABPOL 11 LAYER ACON  15 LAYER AM1   17 : 処理部 APOL = AAPOL NOT WIN M1 = AM1 NOT WIN CON = ACON NOT WIN : POL = APOL AND FLD : 修理するファイルの形式  [1]  LAYER部 ”LAYER AAPOL 10”といった形式で”AAPOL”が”10”に割り当てられる [2]  処理部   ”APOL = AAPOL NOT WIN”といった形式で各単語が論理演算される。 [2]の処理部では「1]で定義された単語が何度論理演算されているかはわからない。 AWKでおこないたい処理 (1)LAYER部で”10”、”17”で定義された単語(例では”AAPOL”と”AM1”)を取得 (2)処理部で(1)で取得した単語を使用して処理部で作成された全単語を取得

  • awkスクリプトの作成について

    文末に"。""!""?"があれば改行し、さらに文の途中で改行されていたら1行に繋げ、"。""!""?"の後に"」"がある場合は、"。」""!」""?」"で改行するスクリプトを教えてください。途中まではできたので、参考に載せておくのでお願いします。 # onereq.awk # 分析対象テキストを、1文1行(レコード)形式に整形する # 日本語用 # 文末記号 。!?があれば改行 # 文中での改行は1行につなげる # 「」をうまく表示させる { gsub( /。/, "。\n", $0) gsub( /?/, "?\n", $0) gsub( /!/, "!\n", $0) print( $0 ) }

  • AWKスクリプトの入力ファイルについて

    AWKスクリプトで入力ファイルを複数使用することは 可能でしょうか? 実際にやりたいことは 例えば ファイル1 NQN PQP RPO ファイル2 MN NQN MP PQP R RPO というような2種類のファイルがありファイル1が実際に処理をする入力ファイル でファイル2が対応表に該当するファイルです。 ファイル1とファイル2を読み込んで ファイル1を NQN MN PQP MP RPO R というように加工して出力したいのですが AWKでこういった処理は可能なのでしょうか?

  • バッチかスクリプト

    こんにちは、早速ですがある共有フォルダ内にあるフォルダやファイルを一発で消せるバッチ又はスクリプトの書き方を教えてください(もちろんアクセス権は有効である条件のもとで)。ちなみにOSはNT4.0です。

  • バッチファイルでテキストファイルを分割したい

    テキストファイルを、指定した数値の倍数の行を、指定した個数に分割するバッチファイルを作成しようとしています。 例えば、以下の様な内容の「in.txt」というテキストファイルを3分割したい場合、 ----- in.txtの内容 ----- 1 2 3 4 5 6 7 8 9 10 ------------------------ 以下の様な内容で、 「out1.txt」「out2.txt」「out3.txt」として出力したいのです。 ----- out1.txtの内容 ----- 1 4 7 10 -------------------------- ----- out2.txtの内容 ----- 2 5 8 -------------------------- ----- out3.txtの内容 ----- 3 6 9 -------------------------- 自分はプログラミングの知識がないので、WEBに書かれている構文を少し書き換えたりして試しているのですが、うまく行きません。 AWKを使い、以下のようなバッチファイルを作成して実行してみましたが、「out3.txt」だけがうまく行きませんでした。構文の意味も分からないので修正も出来ません。 awk "NR%%3==1" "in.txt" > "out1.txt" awk "NR%%3==2" "in.txt" > "out2.txt" awk "NR%%3==3" "in.txt" > "out3.txt" AWKの解説ページを読み始めたのですが、時間的な猶予があまり無く、今回質問させて頂いた処理が出来るようになるまでまだ時間が掛かりそうなので、どなたかお分かりの方がおられましたお教え頂けないでしょうか。 AWKでなくとも、sedでもPerlでもその他のコマンドでも構いませんし、スクリプトファイルを読み込めるコマンドでしたらスクリプトでの書き方でも結構ですので、ご存知の方がおられましたらお教え頂けないでしょうか。

  • バッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたい

    バッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたいと考えています。 具体的には、 ■call.bat■ ****************** call 1.bat call 2.bat ****************** ■1.bat■ ****************** mkdir test1 ****************** ■2.bat■ ****************** mkdir test2 ****************** の3つのバッチファイルで、1.batがエラーになっても 2.batを実行させたいと考えています。 どうしたらいいのでしょうか。 よろしくお願いします。

  • バッチファイル作成について

    フォルダにファイルが一つ入っている状態です。このファイル入りのフォルダを連番で1000個までコピーするためのバッチファイルはどのように作成すればよいでしょうか。 できれば参考となる記載をいただけると幸いです。 宜しくお願い致します。

  • シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのです

    シェルスクリプトで、空白(スペース)を含む変数をawkに渡したいのですが、どうしたらいいでしょうか? 例えば、以下のようなtest.shというファイルを作ったとします。 --------------- #!/bin/sh AAA="x y" echo "" | awk '{print $AAA}' -------------- としたとき、$AAAが正常に出力できません。(なお、echo "" は、awkを走らせる為の単なるダミーです。) printの部分を ・awk '{print '$AAA'}' ・awk '{print "'$AAA'"}' などともしてみましたが、ダメでした。どのようにすればうまくいくでしょうか?

  • 今、awkを使ったシェルスクリプトを作っています。

    今、awkを使ったシェルスクリプトを作っています。 aaa bbb ccc ddd ee ff gggg hhh といったファイルから、 bbb,ccc ff,gggg を取り出したいと思っています。 そこで、以下のコマンドをwhileでまわして、$iを増加させることにより、 ファイルを一行ずつ読み取り、目的の列を取り出したく思っています。 A=`cat sample.txt|awk 'NR == $i {print NR, $2;}'` B=`cat sample.txt|awk 'NR == $i {print NR, $3;}'` ところが、awkコマンドの中の$iがシングルクォーテーションでくくられているので、 変数展開されなくて困っています。 何かよい方法があればご教授いただけますでしょうか?