如何在awk中模拟`uniq -d`?

时间:2012-06-04 13:11:10

标签: sed awk uniq

我有一个没有uniq的busybox系统,我想生成一个唯一的重复行列表。

uniq中模拟的普通awk将是:

sort <filename> | awk '!($0 in a){a[$0]; print}'

如何使用awk(或sed来解决此问题,而不是perl):

sort <filename> | uniq -d

3 个答案:

答案 0 :(得分:5)

在busybox系统上,您可能需要保存字节。 ; - )

awk ++a[\$0]==2

答案 1 :(得分:3)

可以这样做(无需对其进行排序):

awk '{++a[$0]; if(a[$0] == 2) print}'

答案 2 :(得分:0)

这可能对您有用:

# make some test data
seq 25 >/tmp/a
seq 3 3 25 >>/tmp/a
seq 5 5 25 >>/tmp/a
# run old command
sort -n /tmp/a | uniq -d
3
5
6
9
10
12
15
18
20
21
24
25
# run sed command 
sort -n /tmp/a | 
sed ':a;$bb;N;/^\([^\n]*\)\(\n\1\)*$/ba;:b;/^\([^\n]*\)\(\n\1\)*/{s//\1/;P};D' 
3
5
6
9
10
12
15
18
20
21
24
25