2

現在awk、bash スクリプト内でスクリプトを作成しています。私の議論の 1 つは、分割して循環させる必要があります。例: 1234I の引数の場合、書かれた順序で各数値を循環する必要があります。したがって、2413同等ではありません。

以前splitは配列を作成してfor-inから、配列を循環するループを作成していました。順番に循環すると思っていましたが、そうではありません。

私のコードは次のとおりです。

split(cols,toShow,"")
for (c in toShow)
    printf "%s\n",c

colsオプションをawk使用してコマンドに渡され、次の出力が得られます。-v

4
1
2
3

これを数回テストした後、さまざまな長さの引数を使用し、数字と文字の両方を使用して、forループが配列の要素 4 から始まり、順番に最後まで循環し、次に要素 1 から 3 を循環するように見えます。要素 1 から始まり、最後まで循環することが予想されます。

とにかく動作を変更する方法はありますか、それとも何か間違っていますか?

編集明確にするために、私はgawkxubuntu 11.10で使用しています

4

1 に答える 1

4

awkの配列は、(必然的に)元のソースからの順序で格納されません。

また、入力として数字を使用すると、問題が混乱します

これが問題を説明する解決策です

awk 'END{cols="ABCD";n=split(cols,toShow,"")
for (i=1;i<=n;i++)
    printf "%s\n",toShow[i] }' /dev/null

**出力**

A
B
C
D

私が何を意味するかを確認するには、コードをABCDに編集するとfor c in toShow、連想配列の値ではなく、キーを出力するときと同じように数値出力が表示されます。

私のサンプルでABCDを1234に編集すると、探している出力が得られます。

これがお役に立てば幸いです。

于 2012-05-19T16:02:45.920 に答える