- 论坛徽章:
- 0
|
问题1: 关于awk中的操作符"in"在for中应用- # echo "23 sc 39 eu 2 47"|awk '{for(i=1;i<=NF;i++)arry[$i]=$i}END{for(item in arry)printf "%-4.3s| %s\n",item,arry[item]}'
- 47 | 47
- 39 | 39
- sc | sc
- eu | eu
- 23 | 23
- 2 | 2
复制代码- # echo "23 sc 39 eu 2 47"|awk '{for(i=1;i<=NF;i++)arry[i]=$i}END{for(item in arry)printf "%-4.3s| %s\n",item,arry[item]}'
- 4 | eu
- 5 | 2
- 6 | 47
- 1 | 23
- 2 | sc
- 3 | 39
复制代码 Q: 类似这种索引下标是非常规顺序数字的情况,for(item in arry)是如何处理输出先后顺序的?
另外,如果是数字下标,输出顺序如何调整为正常顺序?
=======================================================================================
问题2: 关于awk内部变量"FS"定义对字段数的影响- # echo -e "word1 * word2\n word3 word4"|awk 'BEGIN{FS="[[:space:]]"}{for(i=1;i<=NF;i++)printf $i"-";printf " |"NF"\n"}'
- word1-*---word2- |5
- -word3-word4- |3
- # echo -e "word1 * word2\n word3 word4"|awk 'BEGIN{FS=" "}{for(i=1;i<=NF;i++)printf $i"-";printf " |"NF"\n"}'
- word1-*-word2- |3
- word3-word4- |2
- # echo -e "word1-*---word2\n word3-word4"|awk 'BEGIN{FS="-"}{for(i=1;i<=NF;i++)printf $i"/";printf " |"NF"\n"}'
- word1/*///word2/ |5
- word3/word4/ |2
复制代码 Q: 为什么指定"FS=[[:space:]]"或"FS=[[:blanck:]]"得到的字段与指定FS=" "得到的字段数不一致呢?
换句话说就是为什么在"FS=[[:space:]]"或"FS=[[:blanck:]]"时awk没有自动压缩多余空白符?即使换成其它分隔符也是一样,好像awk对空白符会特别照顾
=======================================================================================
问题3: 关于awk对于跨行字段的处理- # cat file_test
- word1 word2
- word3 word4
- word3 word4
- word5 word6
- word5 word6
- # cat file_test |awk 'BEGIN{RS="";FS="o"}{for(i=1;i<=NF;i++)printf $i"|";printf "\n" }'
- w|rd1 w|rd2|w|rd3 w|rd4|
- w|rd3 w|rd4|w|rd5 w|rd6|
- w|rd5 w|rd6|
复制代码 Q: 为什么这里定义了字段分隔符为"o",但还是将第一行的"rd2"与第二行的"w"分开了?
希望各位大侠能给点提示,集思广益,大家讨论讨论。。。^_^ |
|