• ベストアンサー

awkで複数ファイルを入力した場合を教えてください。

man awkとしたとき引数がfile...となっていたので 複数のファイルを引数にとれるのかなと思ったのですが その場合$1などフィールドを参照するときはどうなるのでしょうか?

noname#24489
noname#24489

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

>複数のファイルを引数にとれるのかなと思ったのですが その通りです。 指定されたファイルの順番でawkで処理されます。 つまり指定されたファイルの順番で1つにまとめられたファイルが指定された時と同じだと思えばいいかと。 >その場合$1などフィールドを参照するときはどうなるのでしょうか? 特に入力ファイルが複数あるから変わるという事はないです。 普通に入力されたレコードをフィールドセパレータ(FS)でフィールドに分けられるだけです。

noname#24489
質問者

お礼

ありがとうございます。 なるほど。ひとつづつ処理されていくのですね。^^

その他の回答 (1)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

はい。複数のファイルをスペースで区切って入力出来ます。 >その場合$1などフィールドを参照するときはどうなるのでしょうか? こっちはシェルの話ですよね。 一度ファイルにリダイレクトして、ファイル作成してからawkに食わせます。私なら。

noname#24489
質問者

お礼

なるほど。ありがとうございます。 pasteというコマンドがあるのを知って、 awkで複数ファイルを引数にとれるならおなじような ことができるかなと思ったのですが、 ひとつずつ連結するのがいいみたいですね。

関連するQ&A

  • awkで複数ファイルをよんで$1$2と参照できるでしょうか?

    awkで複数ファイルをよみこんでファイル1の$1ファイル2の$2と参照したりできないでしょうか?

  • awk '{print $1}' file をもっと簡単に書きたい

    awkで最も頻繁に使うのが、fileのN列目だけを抜き取ってくるという使い方なんですが ↓ awk '{print $N}' file Nとfileという2つの引数しか使わないのでこれを   my_awk N file  といった具合に間単に使える my_awk シェルを作りたいんですが、$のあたりがうまくかけません、どう直せばいいでしょうか?↓ #!/bin/csh awk '{print $$1}' $2

  • awkについて

    度々すみません。awkについて先程教えて頂いたものですが、少し変更しようと思っているのですが上手くいきません。変更していることは、以下の○○○の内容を固定ではなくてコマンドラインから渡したいです。 ウェブで調べたところARGVというのを使うことはわかりました。そこで"○○○"からARGV[0]に変更してコマンド実行時に引数を与えたのですが、「○○○というファイルを開けません」というエラーになってしまいます。実行したのはawk -f awk data.csv ○○○です。なぜ引数をファイル名だと認識してしまうのでしょうか。初歩的で申し訳ありませんが教えて下さい。 BEGIN{ goukei = 0 count = 0 } { #フィールドの8番目の条件が一致する場合のみ9番目を合計 if($8=="○○○"){ goukei += $9 count++ } } END{ if(count!=0){ print "合計は", goukei print "平均は", goukei/count } else{ print "条件に一致するのない” } }

  • awk の使い方

    sample.txt ファイルには   "中村" "08/01/80" "03.1234.5678"   "木村" "08/01/81" "06.1252.2536" のような情報があります。(フィールドの区別はTabです) そこの3番フィールドが電話番号ですので、awkで検索しようと思っています。 それで、 $ shell 06.1252.2536 #!/bin/sh NUM=$1                    #引数をNUMに代入 awk -v ARGU="$NUM" ' { VAR=substr($3,2,(length($3)-2))      #「"」を取り除いた if ( ARGU == VAR ) {print}         #電話番号と比較 }' /sample.txt のようにして、検索をかけようとしましたが、できません。 どこが間違っているのか教えてください。 awkの他の方法があるとか、違うもの(sed or grep)でできるのであれば、お願いします。

  • awkの使い方について教えてください。

    awkとperlなどの初心者です。 使い方が分かっていないのですが、 例えば出力のフィールドセパレータを,に変更するには どうすればいいでしょうか? awk '{OFS=,;print}' fileなどとやってみますが、 うまくいきません。2つ以上のコマンドを実行するときの 文法がわかっていないような気がするのですが。 あとperlでよくみかけるperl -neのnは何でしょうか? man perlとやってみても-wと-eの意味しかのっていなくて なからないのですが。ご教授下さい。

  • awkでの複数のファイルへの出力

    awkで、1つのファイルから複数のファイルを作りたいのですが、どのような命令を書く必要があるでしょうか。 具体的には、1行ごとに整形したものを別ファイルに保存されるようにしたいのです。BASICのように、ファイルのオープン、クローズの命令があるのでしょうか? awkはgawk32+おーくの友達v094bで使っています。テキストの遊園地(http://homepage2.nifty.com/mozu/koza/park_of_text.html)がとてもわかりやすく書いてあるので、ここでawkを勉強しているのですが、リファレンス的なものも欲しいので、わかりやすいリファレンスになっているサイトやファイル(申しわけありませんが、日本語になっているもので)があれば、そちらの紹介もお願いいたします。

  • 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でこういった処理は可能なのでしょうか?

  • perlでawkのようなことはできるでしょうか?

    perlなど初心者です。 awkでレコードのフィールドを$1、$2などと参照できるのが便利だなと感じているのですが、perlでもコマンドラインで同じ事をするにはどうすればよいでしょうか?

    • ベストアンサー
    • Perl
  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • awkで複数ファイルをそれぞれ集計し、一つのファイルに出力するには

    awkプログラミングを始めたばかりの初心者です。複数ファイルのデータをそれぞれ集計し、一つのファイルに出力するにはどのようなスクリプトを作ればよいのでしょうか。 例 [file1]10,20,30 [file2]20,30,40 [file3]30,40,50 それぞれのファイルの中にある数字を合計して、別のファイル(file4)に一覧表示させる。    ↓ [file4]60 90 120