• ベストアンサー

awkで簡単なスクリプトを生成したいです。

awk初心者です。 awkでたとえば test05 test06 ・・・ test35 といったファイルを作ろうと思ったらどうすればよいでしょうか? また単に testと100行かいたファイルを生成しようとしたら どうすればよいでしょうか?

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

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

すでに回答されていますが、もう少し簡単・高速に、 awk 'BEGIN{for(i=5;i<=35;++i) printf "" > sprintf("test%02d",i)}' >testと100行かいたファイルを生成しようとしたら awkの学習目的でなく単にこれをやりたいなら、 yes test | head -100 > file.txt yesコマンドは引数の文字列(省略時は y)を無限に出力し続けるコマンドで、head -100 はそれを100行目まで切り取るコマンドです。

vivi0303
質問者

お礼

ありがとうございます。 yesコマンドですか。おもしろいですね。 killしなくてもyesが終了するのは なぜなのでしょうか?

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.3

>killしなくてもyesが終了するのは kill すると(特に指定しなければ)SIGTERMというシグナルが送られ、受け取ったプロセスは終了処理に入ります。 yes | tail -10 のようにパイプの後段が前段より先に終了すると、シェルがそれを検知して前段に対してSIGPIPEというシグナルを送ります。受け取ったプロセスは通常は終了処理に入ります。

vivi0303
質問者

お礼

ありがとうございます。無限ループということですが、 yes testとして次のコマンドに引き渡されるタイミングはいつになるのでしょうか?

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

# test05 ~ test35 までの0byte のファイルを作成 awk 'BEGIN{for(i=5;i<=35;i++) {file = sprintf("test%02d", i);system("touch "file)} }' # testと100行かいたファイルを生成 awk 'BEGIN{for(i=1;i<=100;i++) print "test" }' > test100

vivi0303
質問者

お礼

ありがとうございます。 表現が不十分でした。すいません。 ファイルの内容が test05 test06 ・・・ test35 のファイルを作るという意味でした。 awk 'BEGIN{for(i=1;i<=100;i++) print "test" }' > test100 なのですが、確かにできました。入力ファイルはなくてもよいのでしょうか?ない場合は標準入力からかと思ったのですが。

vivi0303
質問者

補足

ファイルの内容が test05 test06 ・・・ test35 は awk 'BEGIN{for(i=1;i<=100;i++) print "test" }' > test100 を応用すればできそうですね。

関連するQ&A