数组 – 为什么awk似乎随机化数组?
如果你看看这个awk测试的输出,你会看到awk中的数组似乎是以某种随机模式打印的.对于相同数量的输入,它似乎是相同的顺序.它为什么这样做?
echo "one two three four five six" | awk '{for (i=1;i<=NF;i++) a[i]=$i} END {for (j in a) print j,a[j]}' 4 four 5 five 6 six 1 one 2 two 3 three echo "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" | awk '{for (i=1;i<=NF;i++) a[i]=$i} END {for (j in a) print j,a[j]}' 17 1SAF 4 1C26 18 1SAK 5 1DT7 19 1SAL 6 1GZH 7 1H26 8 1HS5 9 1JSP 10 1KZY 20 1TSR 11 1MA3 21 1TUP 12 1OLG 22 1UOL 13 1OLH 23 1XQH 14 1PES 1 P04637 24 1YC5 15 1PET 2 1A1U 25 1YCQ 16 1SAE 3 1AIE 为什么会这样做,这有什么规则吗? 解决方法
在引用for(数组中的值)语法时,从GNU Awk用户指南中的
8. Arrays in awk –> 8.5 Scanning All Elements of an Array开始:
因此,如果要按照存储顺序打印数组,则必须使用经典的for循环: for (j=1; j<=NF; j++) print j,a[j] 例: $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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |