需求: 一个文件内有多行,还有不定量的列,要求找出每行中最大的一个数字
使用awk实现:
cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
输入输出示范:
$ cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
400
9999
1234
1234
1234
$ cat list
200 300 400 100
123 2122 345 9999
222 444 333 1234
222 444 333 1234
222 444 333 1234
222 444 333 1234 <<<<<<< HEAD
需求: 统计每个IP对HTTP server的请求数
awk实现(这里假设access_log每行的第一列就是访问者的IP地址):
awk ‘{array[$1]++}END{for(i in array){print i, “accessed “, array[i], “ times”}}’ access_log | sort -gr | head -20 |
简单解释一下:在awk内部使用变量无需事先声明,如果变量是列表,那么列表的每个新的元素的值会默认设置为0。而awk又是流处理器,前面的部分相当于对每行进行操作,得到的数组就会是array[123.123.123.123]=1
这种形式。在END块里直接用一个循环输出列表中的每个元素就能得到每个IP访问了多少次了。
======= 222 444 333 1234
7e6037e695c33df0c7e4f6ff16a138401b41d4a6