如何在每个块中打印出重复的数字:block1,block2 ...?
block1
11
12
12
13
block2
11
13
13
11
11
所需的输出:
block1 12 2
block2 13 2
block2 11 3
答案 0 :(得分:3)
您可以使用此awk
:
awk 'function prnt() { for (i in seen) if (seen[i] > 1) print b, i, seen[i] }
/^[0-9]+$/ {seen[$1]++; next}
{prnt(); b=$1; delete seen}
END{prnt()}' file
block1 12 2
block2 11 3
block2 13 2
/^[0-9]+$/
条件检查$0
中的值是否为数字。
答案 1 :(得分:3)
抢救Perl!
perl -lne 'sub output { $seen{$_} > 1 and print "$block $_ $seen{$_}" for keys %seen }
if (/block/) { output(); %seen = (); $block = $_ }
else { ++$seen{$_} }
END { output() }'
-n
逐行读取输入-l
从输入中删除换行符并将其添加到输出中%seen
哈希用于计算每个块的出现次数,$block
存储当前块的名称