我有一个文件:
jeden
dwa
jeden
trzy
trzy
cztery
piec
jeden
此命令打印出来:
$ awk 'BEGIN {while ((getline < "file") > 0) if(a[$0]++) print }'
jeden
trzy
jeden
我想打印所有副本:
jeden
jeden
trzy
trzy
jeden
编辑:
我找到了一个有效的例子。
awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } } x[$1] = $0}' file
我想做同样的事情,但是使用getline。
答案 0 :(得分:3)
awk 'BEGIN {while ((getline < "file") > 0) { a[$0]++; if(a[$0] == 2) print; if (a[$0] >= 2) print }}'
当计数为2时,它会打印该行。当计数大于或等于2时,它会打印该行。因此,对于第二次出现,该行打印两次以“赶上”。
答案 1 :(得分:1)
您需要将所有行存储在内存中或者再次通过该文件。做第一个可能更容易,除非它是一个大文件,你可能有它的记忆。当然,你可以将它填充到一行,但为了便于理解,这里它是一个文件。
#!/usr/bin/awk -f
{
lines[NR] = $0
counts[$0]++
}
END {
for(i = 0; i < length(lines); i++) {
if(counts[lines[i]] > 1) {
print lines[i]
}
}
}
此外,您的原文将更加简明扼要地写成:
$ awk 'a[$0]++' file
答案 2 :(得分:0)
这可能对您有用:
awk '{a[$1]++}END{for(x in a)if(a[x]>1)for(i=1;i<=a[x];i++)print x}' file