java 发表于 2018-4-24 16:42:50

awk 命令


语法
awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-v var=value or --asign var=value
赋值一个用户定义变量。


用法一:
awk '{ action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt

用法二:
awk -F#-F相当于内置变量FS, 指定分割字符
# 使用","分割
$awk -F, '{print $1,$2}'   log.txt

用法三:
awk -v# 设置变量
$ awk -va=1 '{print $1,$1+a}' log.txt

http://www.runoob.com/linux/linux-comm-awk.html

java 发表于 2018-4-25 11:53:08

数组用法
Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串。
下标通常称为键,数组元素的键和值存储在Awk程序内部的一个表中,该表采用散列算法,因此数组元素是随机排序。
数组格式:array=value

https://www.cnblogs.com/276815076/p/6410179.html
统计日志中访问最多的10个IP
思路:对第一列进行去重,并输出出现的次数
方法1:$ awk '{a[$1]++}END{for(i in a)print a,i|"sort -k1 -nr|head -n10"}' access.log
方法2:$ awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
说明:a[$1]++ 创建数组a,以第一列作为下标,使用运算符++作为数组元素,元素初始值为0。处理一个IP时,下标是IP,元素加1,处理第二个IP时,下标是IP,元素加1,如果这个IP已经存在,则元素再加1,也就是这个IP出现了两次,元素结果是2,以此类推。因此可以实现去重,统计出现次数。


java 发表于 2018-6-15 13:22:20

字符串匹配
判断字符串中是否含有 单引号BEGIN {
isNum = 1
}
#运行中
{
    strA=$1
    print $strA
    if(match(strA,/[\']/) != 0) {
    print "OK"
    }
}
#运行后
END {
}
页: [1]
查看完整版本: awk 命令