Linux 不排序去除重复行和不排序统计重复行

Linuxawk大约 547 字

一般在去除或统计重复行时使用sortuniq对文件进行排序后uniq操作。

可参考:Linux 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中的数组无需初始化,并且任意命名,上述两个例子中的ax即代表数组名。

文件格式问题

阅读 1005 · 发布于 2019-08-26

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批