Sed 我如何在awk中模仿'uniq-d'?

Sed 我如何在awk中模仿'uniq-d'?,sed,awk,uniq,Sed,Awk,Uniq,我有一个没有uniq的busybox系统,我想生成一个唯一的重复行列表 在awk中模拟的普通uniq是: sort <filename> | awk '!($0 in a){a[$0]; print}' 可以这样做(无需排序): 在busybox系统上,可能需要保存字节。;-) 这可能适合您: # make some test data seq 25 >/tmp/a seq 3 3 25 >>/tmp/a seq 5 5 25 >>/tmp/a # r

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

awk
中模拟的普通
uniq
是:

sort <filename> | awk '!($0 in a){a[$0]; print}'
可以这样做(无需排序):


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


这可能适合您:

# 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

我不知道你可以使用关联数组。@杰米:这正是你在第一个示例中使用的,即使你认为它实际上是一个集合。你仍然可以去掉两个空格。如果你在bashrc中放入
alias a='awk++a[\$0]==2'
,你可以去掉除一个以外的所有字符。:)
awk '{++a[$0]; if(a[$0] == 2) print}'
awk ++a[\$0]==2
# 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