awk常用基础命令(ing)

Awk

1. 打印文件的某列:

awk '{print $2}' handdata
注:handdata为文件名,其中的$1..$n表示第几例。注:$0表示整个行

2. 过滤记录:

awk '$2==0 ' handdata
注:筛选出第二列为零的
awk '$2==0 && $3>10' handdata
注:筛选出第二列等于0,第三列>10的
筛选等于字符串的条件需要用双引号
awk '$2==”xxx”' handdata
awk '$2==0 && $3>10 {print $0}' handdata
注:筛选出第二列等于0,第三列>10的后,打印全部
如果我们需要表头的话,我们可以引入内建变量NR
Eg:awk '$2==0 && $3>10 || NR==1' handdata

3. awk指定分隔符

FS : 输入字段分隔符,默认空白(空格或者tab)。
RS : 输入行分隔符,默认\n。
OFS : 输出字段分隔符,默认空格。
ORS : 输出行分隔符,默认\n
cat tcomvv160907 |awk -F"\t" '{print $16}'|more
打印 tcomvv160907文件按\t分割的第十六列
cat tcomvv160907 |awk -F"\t" '$16==0 {print $0}'
指定输入输出分隔符
head -n 5000 part-m-00000 |awk 'BEGIN{FS="\001";OFS="\t"} $30 == "电子商务" {print $1,$30}'
代码中输入分隔符为\001,输出分隔符为\t
统计某一列不重复的数量
awk -F"\001" '{cnt[$19]=1}END{print length(cnt)}' part-m-00000

4.对列求和:

cat session160905new|awk '{sum+=$2} END {print "Sum = ", sum}'

5.或操作

验证第三个字的值是否在1-20范围内,可以打印出不符合要求的数据来验证,使用了默认处理{print $0}(不指定Action则使用默认的Action):
awk -F',' '$3<1 || $3>20' data.csv

6.处理一个大日志文件,只想随机抽取其中一些样本来进行分析

awk 'rand()<0.1' log.csv > sample.csv
在模式中,使用了rand()函数来随机产生0,1之间的小数,只有当前产生的值小于0.1才打印当前行,即只随机抽取10%的数据作为样本。

7.倒数

打印日志的字段数使用变量NF,最后一列数据使用变量$NF,倒数第二列使用$(NF-1):
$ awk '{print NF, $NF,$(NF-1)}' log.csv

你可能感兴趣的:(awk常用基础命令(ing))