Encontre strings que aparecem consecutivamente em um arquivo

1

Todos,
Eu tenho um arquivo onde strings aparecem em cada linha no seguinte formato:

STRING1  
STRING2  
STRING1  
STRING1  
STRING1   
STRING3  
STRING4  
STRING4  
STRING5  
STRING6  
STRING5 

Eu quero encontrar quais strings aparecem consecutivamente no arquivo, usando o script bash. Por exemplo, no exemplo acima, STRING1 e STRING4 aparecem consecutivamente e devem estar lá na saída. Note que, mesmo que STRING5 apareça duas vezes, ele não aparecerá consecutivamente.

Eu não quero classificar o arquivo porque o tamanho do arquivo normalmente seria grande e isso aumentaria a sobrecarga. O usuário forneceria a string e o script informaria se a string aparece consecutivamente no arquivo.

FYI, as strings podem ter espaços indesejados depois delas.

    
por smokinguns 12.10.2011 / 08:03

3 respostas

4

$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
    
por 12.10.2011 / 08:07
0
awk -v "key=STRING4" '
    $1 == key && $1 == prev {
        print key " appears on consecutive lines on line " NR
        found=1
        exit 0
    } 
    {prev = $1}
    END {if (! found) {print key " does not appear on consecutive lines"; exit 1}}
' filename
    
por 12.10.2011 / 17:53
0

E quanto a leitura e comparação de string? Parece a solução mais fácil para mim.

while read line; do 
    if [ "$line" == "$temp" ]; then 
        echo "$line"; 
    fi; 
    temp=$line; 
done < test.txt
    
por 16.10.2011 / 18:13