BBS-complangawk/334

トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

Inserting Text into a file - ianbacon999 (2006年07月23日 22時39分10秒)

#!/bin/bash
if [ $# -ne 1 ]; then
   echo "Usage:$0 insert "
   exit
fi

JMS_INSERTFILE=$1

cat jms.bak | nawk -v filename=$JMS_INSERTFILE '
BEGIN{if (filename=="")
      {
       print "Error:no filename given";
       exit 1;
      }
}
!/\<\/queue\>/ {print}
/\/\>/ {while( getline<filename) print;}
' > jms.xml

のようにしていますが、最後の "/>" ではなく最初の "/>" の前に挿入されてしまいます。もしくは最後の "</" の前に挿入したいのですが、どうすればいいのでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/f4f979ca1db777a1/b80570bc6c12583d?hl=ja#b80570bc6c12583d


Re: - Ed Morton (2006年07月23日 22時40分45秒)

awk -v filename="$JMS_INSERTFILE" '
NR==FNR && /\/\>/ { lineNr=NR; next }
!/\<\/queue\>/ {print}
FNR==lineNR { while( getline<filename) print;}
' jms.bak jms.bak

のようにして、どこで問題が起きているのかを特定してください。

Re: - Ed Morton (2006年07月23日 22時41分26秒)

NR==FNR && /\/\>/ { lineNr=NR; next }

NR==FNR { if ($0 ~ /\/\>/) lineNr=NR; next }

の間違いです。

Re: - ianbacon999 (2006年07月23日 22時42分45秒)

最後の "</" の前に挿入するにはどうすればいいのでしょうか?

Re: - Ed Morton (2006年07月23日 22時43分16秒)

/\/\>/ を /<\// に変えるだけです。