1

ログに count と pattern の値が表示されますが、macthed の値を取得できません。変数でデバイスのリストを取得する必要があるのですが、 count と pattern の値が取得されていないと思います。

pattern=ABCD
count=4
x=3
if [[ $count -gt $x ]] ; then
echo "Count : $count" >> ${LOGFILE}
echo "Pattern : $pattern" >> ${LOGFILE}
list=cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}'
echo "List : $list" >> ${LOGFILE}`

以下の方法で試しましたが、機能しません

cat /tmp/info.txt | awk 'a-->0;/"$pattern"/{a=$count}' >> ${LOGFILE}

コマンドラインで直接実行すると、正常に動作します...

cat /tmp/info.txt | awk 'a-->0;/ABCD/{a=4}'
4

1 に答える 1

3

「パターン」はシェル変数です。awk はシェルではなく、awk であるため、C プログラム内でシェル変数にアクセスすることを期待しないように、awk スクリプト内でシェル変数にアクセスすることを期待しないでください。

comp.unix.shell FAQ の質問 24 を参照してください。

http://cfajohnson.com/shell/cus-faq-2.html#Q24

「-v」オプションを使用します。

次に、シェルの問題も修正して、次の結果を取得します。

pattern=ABCD
count=4
x=3
if [[ $count -gt $x ]] ; then
echo "Count : $count" >> "$LOGFILE"
echo "Pattern : $pattern" >> "$LOGFILE"
list=$(awk -v pattern="$pattern" -v count="$count" 'a-->0; $0 ~ pattern{a=count}' /tmp/info.txt)
echo "List : $list" >> "$LOGFILE"

これはあまり意味がありませんがfi、適切な場所に を追加すると、少なくとも構文的に正しいはずです。何をしようとしているのか教えていただければ、それを実行するための適切なスクリプトを作成するお手伝いをいたします。

于 2013-04-10T14:08:09.230 に答える