1.模仿wc的行为,统计一个文本文件的文件的字符数、行数、单词数.
awk ‘{numOfChar+=length($0);numOfWord+=NF}END{print numOfChar" " numOfWord" "NR }‘ file
2.上面的例子中有个问题,统计的字符数中包含空格,那么不包含空格的字符数要怎么算?
awk ‘{for (i=1; i<=NF; i++) numOfChar+=length($i)}END{print numOfChar}‘ file
3.awk中如何引用外部变量
name="pola"
echo "" | awk ‘{print "awk awk awk" “‘$name‘”}‘
双引号里单引号里$var.
4.awk数值计算中,如何将一个字符串识别为一串数字?
0开头的字符串按8进制识别,0x开头的字符串按照16进制识别,除此之外按照十进制。这些都是理想的情况,对于其他的情况则按照最长前缀匹配,即有多少匹配多少。
echo "0x12" | awk ‘{printf("%d\n",strtonum($0));}‘
5. 点(.)开头的单词怎么整?
readelf一个.o文件会有.text段的内容出来,如果想找出包含".text"单词的行呢?注意,这个“单词”就是一个点开头,然后后面接了一个正规的单词,其实这并不是个单词!所以当我们使用grep "\b\.text\b"去筛选这样一行时,根本就筛不出来,为什么?\b是个元字符,也是个零宽断言,你可以认为它会匹配这样一个奇怪的位置:两个字符的中间!它就去匹配(数字、字母、下划线)与(空格,标点符号,换行符)中间的位置。现在好了,我们的.text,由于点的左面是个空格,所以空格与点之间并不能匹配上\b,所以使用\b就搜不出来一个单词喽!
6. 读某.o文件中代码段在该文件的偏移
readelf -S write.o | awk ‘/\s\.text/{sub(/\[.*\]/,"",$0); print $4}‘
【awk中模式的部分以及sub等子函数中,正则表达式放在/ /中】