awk tricks
来源:互联网 发布:竞业限制补偿金算法 编辑:程序博客网 时间:2024/06/06 11:47
初始入门
cat awk.txtItem1,200Item2,500Item3,900Item2,800Item4,500Item1,400Item2,200Item3,700Item4,800Item1,600
- 第二列求和
awk -F","'{x+=$2}END{print x}' awk.txt5600
- 对某个Item求和
awk -F,'$1=="Item1"{x+=$2;}END{print x}' awk.txt1200
- 去重
awk -F, '{a[$1];}END{for (i in a)print i;}' awk.txtItem1Item2Item3Item4
- 分组求和sum
awk -F,'{a[$1]+=$2;}END{for(i in a)print i", "a[i];}' awk.txtItem1, 1200Item2, 1500Item3, 1600Item4, 1300
- 分组max
awk -F, '{if (a[$1] < $2)a[$1]=$2;}END{for(i in a){print i,a[i];}}' OFS=, awk.txtItem1,600Item2,800Item3,900Item4,800
- 分组count
awk -F, '{a[$1]++;}END{for(i in a)print i, a[i];}' awk.txtItem1 3Item2 3Item3 2Item4 2
- 分组拼接
awk -F,'{if(a[$1])a[$1]=a[$1]" "$2;else a[$1]=$2;}END{for(i in a) printi,a[i]}' OFS='\t' awk.txtItem1 200 400 600Item2 500 800 200Item3 900 700Item4 500 800
- 取第二行开始,每隔3行的数据
awk 'BEGIN{i=2} {if(NR==i) {print substr($0, 2, length($0)-2); i+=3}}' ok.txtItem2,500Item4,500Item3,700
其他用法
- 删除每行起始的空白
awk '{ sub(/^[ \t]+/, ""); print }'
- 删除每行结尾的空白
awk '{ sub(/[ \t]+$/, ""); print }'
- 删除每行收尾的空白
awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }'
- 删除空白行
awk 'NF'awk 'NF > 0'awk '!/^$/'awk '/./'
- 删除每行的第二个字段
awk '{ $2 = ""; print }'
- 每隔n行插入空行
awk '{ if ((NR % 5) == 0) printf("\n"); print; }'
- 抽取指定范围的行
awk 'NR >= 10 && NR <= 20'
- 替换分隔符
awk '$1=$1' FS="----" OFS=","awk 'gsub("----",",")'
- 找出匹配的子串
awk '{match($0,"a*f"); print substr($0,RSTART)}'echo "abcdef" | gawk 'match($0, /b(.*)e/, a) {print a[1]}'
- 写入多个文件
awk '{print >> ("filename"$1)}'
- 计算调用方法耗时
tail -100000 performance.log | awk -F '-' '{print substr($2, 2, length($2) - 3)}' | awk '/^com/ {print $0}' | awk -F '=' '{a[$1]+=$2; b[$1]++;}END{for(i in a){print i, b[i], a[i] / b[i];}}' | sort -n -k 3 -r
- 过滤
awk '/l*c/{print}' /etc/localhost
- 两个文件join
cat a.txt 111 org 222 edu 333 gov 444 net cat b.txt 111 Tom Green. 444 Ani Teen. 888 Dany Cross. 结果要求 ---------------------------------------------------- 111--org--Tom--Green. 444--net--Ani--Teen. ----------------------------------------------------
awk -v OFS='--' 'NR==FNR {a[$1]=$2}; NR!=FNR && a[$1]{print $1, a[$1], $2, $3}' a.txt b.txt
FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计。
1 0
- awk tricks
- Tricks of SED/AWK/GREP
- tricks
- tricks
- awk
- awk
- AWK
- awk
- AWK
- awk
- awk
- AWK
- awk
- awk
- AWK
- awk
- awk
- awk
- java 利用JAX-RS快速开发RESTful 服务
- C++异常安全 http://www.cnblogs.com/qinfengxiaoyue/p/3713762.html
- Ubuntu下ZooKeeper安装过程 (转)
- rpm 命令
- Android_03_三种对话框
- awk tricks
- 如果你操作文件夹时出现莫名其妙的错误
- iOS本地推送
- 容易 删除排序链表中的重复元素
- android中获取拼音的类
- UI----Touch
- 物流运输
- 小弟刚入手atoll3.3,还有三张地图,分别为5米,10米,50米精度的,加上维也纳大学LTE系统级平台代码,
- 容易 二进制中有多少个1