As soluções postadas por outras pessoas não funcionam no Debian Jessie: elas mantêm uma cópia única de qualquer linha duplicada, enquanto eu entendo o OP que tudo cópias das linhas duplicadas devem ser mantidas. Se eu entendi o OP certo, então ...
-
O seguinte comando
awk '!seen[$0]++' file
remove todas as linhas duplicadas.
-
O seguinte comando
awk 'seen[$0]++' file
exibe todas as duplicatas, mas não a cópia original: isto é, , se uma linha aparecer n vezes, gera a linha n-1 tempos
-
Então o comando
awk 'seen[$0]++' file > temp && awk '!seen[$0]++' file >> temp
resolve o seu problema. As linhas não estão na ordem original.
-
Se você deseja criar linhas com duas ou mais duplicatas, agora pode iterar as etapas acima:
awk 'seen[$0]++' file | awk 'seen[$0]++' > temp
mantém n-2 cópias das linhas que têm n > 1 duplicadas. Agora
awk '!seen[$0]++' temp > temp1
remove todas as linhas duplicadas do arquivo temporário, e agora você pode obter o que deseja ( isto é, somente as linhas com n > 1 duplicadas) como segue:
cat temp1 >> temp; cat temp1 >> temp
-
Se você precisar fazer isso para linhas que aparecem N ou mais vezes, o seguinte comando
awk 'seen[$0]++ && seen[$0] > N' file
é mais simples que encadear N vezes o comando
awk 'seen[$0]++' file
.