Why does awk seem to randomize the array?

前端 未结 4 823
忘了有多久
忘了有多久 2020-11-29 12:36

If you look at output of this awk test, you see that array in awk seems to be printed at some random pattern. It seems to be in same o

4条回答
  •  时光取名叫无心
    2020-11-29 13:31

    From 8. Arrays in awk --> 8.5 Scanning All Elements of an Array in the GNU Awk user's guide when referring to the for (value in array) syntax:

    The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array elements within awk and cannot be controlled or changed. This can lead to problems if new elements are added to array by statements in the loop body; it is not predictable whether or not the for loop will reach them. Similarly, changing var inside the loop may produce strange results. It is best to avoid such things.


    So if you want to print the array in the order you store it, then you have to use the classical for loop:

    for (j=1; j<=NF; j++) print j,a[j]
    

    Example:

    $ awk '{for (i=1;i<=NF;i++) a[i]=$i} END {for (j=1; j<=NF; j++) print j,a[j]}' <<< "P04637 1A1U 1AIE 1C26 1DT7 1GZH 1H26 1HS5 1JSP 1KZY 1MA3 1OLG 1OLH 1PES 1PET 1SAE 1SAF 1SAK 1SAL 1TSR 1TUP 1UOL 1XQH 1YC5 1YCQ"
    1 P04637
    2 1A1U
    3 1AIE
    4 1C26
    5 1DT7
    6 1GZH
    7 1H26
    8 1HS5
    9 1JSP
    10 1KZY
    11 1MA3
    12 1OLG
    13 1OLH
    14 1PES
    15 1PET
    16 1SAE
    17 1SAF
    18 1SAK
    19 1SAL
    20 1TSR
    21 1TUP
    22 1UOL
    23 1XQH
    24 1YC5
    25 1YCQ
    

提交回复
热议问题