- ベストアンサー
awkで簡単なスクリプトを生成したいです。
awk初心者です。 awkでたとえば test05 test06 ・・・ test35 といったファイルを作ろうと思ったらどうすればよいでしょうか? また単に testと100行かいたファイルを生成しようとしたら どうすればよいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すでに回答されていますが、もう少し簡単・高速に、 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行目まで切り取るコマンドです。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10361)
>killしなくてもyesが終了するのは kill すると(特に指定しなければ)SIGTERMというシグナルが送られ、受け取ったプロセスは終了処理に入ります。 yes | tail -10 のようにパイプの後段が前段より先に終了すると、シェルがそれを検知して前段に対してSIGPIPEというシグナルを送ります。受け取ったプロセスは通常は終了処理に入ります。
お礼
ありがとうございます。無限ループということですが、 yes testとして次のコマンドに引き渡されるタイミングはいつになるのでしょうか?
- maura
- ベストアンサー率46% (48/104)
# 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
お礼
ありがとうございます。 表現が不十分でした。すいません。 ファイルの内容が test05 test06 ・・・ test35 のファイルを作るという意味でした。 awk 'BEGIN{for(i=1;i<=100;i++) print "test" }' > test100 なのですが、確かにできました。入力ファイルはなくてもよいのでしょうか?ない場合は標準入力からかと思ったのですが。
補足
ファイルの内容が test05 test06 ・・・ test35 は awk 'BEGIN{for(i=1;i<=100;i++) print "test" }' > test100 を応用すればできそうですね。
お礼
ありがとうございます。 yesコマンドですか。おもしろいですね。 killしなくてもyesが終了するのは なぜなのでしょうか?