プロが教える店舗&オフィスのセキュリティ対策術

シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

の継続質問です。よろしくお願いします。

tacとawkを用いて、"ある特定の文字列の前に文字列を挿入"ということができるのは、
確認することができました。

例えば、
 script.awk (awkスクリプト)
 sample.txt (処理対象ファイル)

という環境で、
 $ cat script.awk
 $ tac sample.txt | awk -f script.awk | tac > sample2.txt
とコマンドを入力した場合、

sample2.txtに、処理が完了したテキストが作成され、
中身も問題ないことを確認できました。

しかし以下のようなことを実現しようと思うと、
うまく行きませんでした・


「非対話的に上記の処理を行いたいのです」


上記の方法では、
catとtacと2回コマンドを叩く必要があります
(1回にもできるのでしょうが…)

できれば、自動的に流れる膨大なシェルスクリプトの処理の中で、
上記の処理を自動的に行うということを実現したいのです。

例えば、auto.shというシェルを実行すれば、
勝手にawkスクリプトを読み込み、勝手に変換したものを出力してくれる…
そのようなシェルを作成したいと考えています。


そこで色々試しましたが上手くいきません。


1.コマンドの分解ができない

tac sample.txt | awk -f script.awk | tac > sample2.txt

の上記を、
 #!/bin/sh

 tac sample.txt
 awk -f script.awk
 tac > sample2.txt
のようにシェルスクリプトに記述しなおして実行しましたが、
上手くいきませんでした。


2.script.awk(awkスクリプト)を内部に取り込み

外部ファイルとして存在している、script.awkをなんとか
シェルに組み込もうと思って、

 awk {(script.awkの内容をそのまま記述)}

のように行いましたが、文法的にやはり無茶苦茶でした・・・。


正直、2番が無理であれば仕方ありませんが、
最低でも1は実現したいと思います。

1の方法だけでも良いので、どなたか回答をお願いします。

A 回答 (1件)

あまり難しく考えず、前回アドバイスしてくれた方のコマンドを元に 1行で書けば OK です。



#!/bin/sh
tac sample.txt | awk '/<\/ABC>/{if (!flg) $0 = $0 "\nGood Evening\nGood Morning"; flg = 1} {print}' | tac > sample2.txt
    • good
    • 0
この回答へのお礼

ありがとうございます!
変に考えすぎていたみたいです・・・無事にできました(^O^)

お礼日時:2007/09/13 16:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!