awk处理案例八--效果如uniq命令
【场景】--达到uniq命令的效果
1. 若是去除重复行;我们很快会想到
1 cat input.txt | sort | uniq 2 awk '! a[$0]++' input.txt
2. 若要只实现像命令uniq的效果呢?
例如文本file
aa
aa
fff
ee
fff
fff
ee
ee
bb
bb
aa
效果如“uniq file”
[li0924@localhost awk]$ uniq file
aa
fff
ee
fff
ee
bb
aa
若用awk来怎么实现呢?
awk '{a[NR]=$0}END{s=a[1];for(i=1;i<=NR;i++){s=a[i]==a[i+1]?s:s RS a[i+1]} printf s}' file
【解析】
思路把结果放到字符串s中;根据列跟后一列进行判断是否相等;若相等就不对其操作;若不一致;就加上后一列;
3. 实现效果如sort | uniq -u呢?即只打印不重复项
1 [li0924@localhost lottu]$ cat lottu01 2 aa 3 aa 4 fff 5 ee 6 fff 7 fff 8 ee 9 ee 10 bb 11 bb 12 aa 13 456 14 fe 15 861 16 [li0924@localhost lottu]$ cat lottu01 | sort |uniq -u 17 456 18 861 19 fe
awk实现代码如下:
awk '{a[$0]++}END{for(i in a){if(a[i]==1)print i}}'
【解析】
用数组a来表示重复的次数;次数为1表示没有重复的;
4. 实现效果如sort | uniq -d呢?即只打印重复项
1 [li0924@localhost lottu]$ cat lottu01 | sort |uniq -d 2 aa 3 bb 4 ee 5 fff
awk实现代码如下:
awk '{a[$0]++}END{for(i in a){if(a[i]>1)print i}}'
【解析】
有了上面的解释;这个很好理解了

浙公网安备 33010602011771号