我有一个busybox系统,没有uniq
,我想生成一个独特的重复行列表。如何在awk中模拟`uniq -d`?
一个普通uniq
在awk
模拟将是:
sort <filename> | awk '!($0 in a){a[$0]; print}'
如何使用awk
(或sed
对于这个问题,不perl
)来完成:
sort <filename> | uniq -d
我有一个busybox系统,没有uniq
,我想生成一个独特的重复行列表。如何在awk中模拟`uniq -d`?
一个普通uniq
在awk
模拟将是:
sort <filename> | awk '!($0 in a){a[$0]; print}'
如何使用awk
(或sed
对于这个问题,不perl
)来完成:
sort <filename> | uniq -d
能做到这一点(needn 't sort it):
awk '{++a[$0]; if(a[$0] == 2) print}'
这可能会为你工作:
# 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
不知道你能做到的关联数组。 – Jamie
@Jamie:即使你认为它实际上是一个集合,但这正是你在第一个例子中所使用的。 – Benoit
你是对的,我在看到这篇文章后反思了这一点。 – Jamie