Linux 不排序去除重复行和不排序统计重复行
Linux awk About 547 words一般在去除或统计重复行时使用sort
及uniq
对文件进行排序后uniq
操作。
现使用awk
命令实现不需要排序即可去重及统计重复行。
示例文本1.txt
aaa
bbb
ccc
xxx
aaa
ccc
zzz
不排序去除重复行
- 逐行将整行内容放入数组
key
中 - 对
value
进行++
运算。++
运算符优先级大于!
- 对
value++
值取反,若value++
为假(即++
运算前还为0)则取反后为真,输出。注意:value++
与++value
的区别
此处因为a[$0]++
在取反运算前还是0,为假,取反后为真,输出。第二次再有相同key
则不输出。
awk '!a[$0]++' 1.txt
输出:
aaa
bbb
ccc
xxx
zzz
不排序统计重复行
- 把所有内容放入
key
中并初始化value为1,若出现多次则累加 - END后遍历数组
x
- 打印文本内容
i
,以及出现的次数x[i]
awk '{x[$0]++}END{for(i in x)print i,x[i]}' 1.txt
输出:
aaa 2
ccc 2
xxx 1
zzz 1
bbb 1
注意
awk
中的数组无需初始化,并且任意命名,上述两个例子中的a
、x
即代表数组名。
Views: 6,761 · Posted: 2019-08-26
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...