Find More Duplicate

1

eu tenho lista enorme como

67603;4716-5469-1335-0870;5450-7938-7992-5530;14523593;03 Oct 2016 - 17:01:15
63123;5592-6762-4853-6320;4532-4142-5613-9690;1441407;03 Oct 2016 - 17:01:15
62562;4532-5581-3790-0140;5292-4905-4356-2840;28898987;03 Oct 2016 - 17:01:15
68080;5188-1564-9611-7580;4556-9998-5999-3300;2262361;03 Oct 2016 - 17:01:15

Eu quero pesquisar mais Número de publicação após 2; e antes do dia 3;

para a primeira linha, o número é 5450-7938-7992-5530 e outra linha 4532-4142-5613-9690 e etc

    
por Mehran Goudarzi 22.10.2016 / 07:55

2 respostas

0

Criando poucos valores duplicados no arquivo stack.txt e imprimindo a saída -

67603;4716-5469-1335-0870;5450-7938-7992-5530;14523593;03 Oct 2016 - 17:01:15
63123;5592-6762-4853-6320;4532-4142-5613-9690;1441407;03 Oct 2016 - 17:01:15
62562;4532-5581-3790-0140;5292-4905-4356-2840;28898987;03 Oct 2016 - 17:01:15
68080;5188-1564-9611-7580;4556-9998-5999-3300;2262361;03 Oct 2016 - 17:01:15
67603;4716-5469-1335-0870;5450-7938-7992-5530;14523593;03 Oct 2016 - 17:01:15
63123;5592-6762-4853-6320;4532-4142-5613-9690;1441407;03 Oct 2016 - 17:01:15
62562;4532-5581-3790-0140;5292-4905-4356-2840;28898987;03 Oct 2016 - 17:01:15
68080;5188-1564-9611-7580;4556-9998-5999-3300;2262361;03 Oct 2016 - 17:01:15
67603;4716-5469-1335-0870;5450-7938-7992-5530;14523593;03 Oct 2016 - 17:01:15
63123;5592-6762-4853-6320;4532-4142-5613-9690;1441407;03 Oct 2016 - 17:01:15

Use o comando abaixo -

 awk 'BEGIN{FS=";"}{a[$3]++} END {for(k in a) print  a[k],k}' stack.txt

Saída -

3 4532-4142-5613-9690
2 5292-4905-4356-2840
3 5450-7938-7992-5530
2 4556-9998-5999-3300
    
por 23.10.2016 / 20:03
1

Considere o seguinte script awk, duplicates.awk :

#!/usr/bin/awk -f
BEGIN {
    RS = "(\r\n|\n\r|\r|\n)"
    FS = "[\t\v\f ]*;[\t\v\f ]*"
    split("", count)
}

{
    count[$3]++
}

END {
    for (item in count) {
        if (count[item] > 1)
            printf "%s\n", item
    }
}

Lembre-se de torná-lo executável, usando, por exemplo, %código%. Você pode canalizar a entrada para o comando ou fornecer um ou mais arquivos de entrada como parâmetros de linha de comando (vários arquivos são tratados como se fossem concatenados em um único arquivo).

A regra BEGIN configura novas linhas universais (ou seja, aceita todas as convenções de nova linha do MS-DOS para Macs antigos para o Unix) e usa ponto-e-vírgula chmod a+rx duplicates.awk como o separador de campo. Para ilustração, eu fiz o separador de campo também consumir qualquer espaço em branco em torno dele, para que ; analise em três campos: x;foo bar ; y , x e foo bar .

A regra de registro (a parte central do snippet) é aplicada a cada registro (linha) na entrada. Como o awk suporta matrizes associativas, simplesmente usamos o terceiro campo, uma cadeia, como uma chave para y array, e incrementamos essa entrada em um. (Incrementar uma entrada de matriz inexistente no awk produz 1, portanto, o primeiro incremento produz 1 e o código funciona como esperado).

A regra END verifica a matriz count , imprimindo as entradas que ocorreram pelo menos duas vezes. Note que esta saída está em ordem aleatória. (Existem maneiras de ordenar a saída de acordo com o número de ocorrências, ou até mesmo manter a ordem original (das primeiras ocorrências) no arquivo, mas o OP não mencionou nenhum requisito de ordenação, por isso não me incomodei; a ordem é a mais simples de implementar.)

Se você quiser imprimir, por exemplo o número de ocorrências seguido pela string (o valor da terceira coluna) e, em seguida, use a seguinte regra END:

END {
    for (item in count)
        printf "%15d %s\n", count[item], item
}

A saída é formatada para que os primeiros quinze caracteres da saída sejam reservados para o número e o valor comece no 17º caractere.

    
por 22.10.2016 / 08:36

Tags