Encuentra cadenas que aparecen consecutivamente en un archivo

1

Todos,
tengo un archivo donde aparecen cadenas en cada línea en el siguiente formato:

STRING1  
STRING2  
STRING1  
STRING1  
STRING1   
STRING3  
STRING4  
STRING4  
STRING5  
STRING6  
STRING5 

Quiero encontrar qué cadenas aparecen consecutivamente en el archivo, usando el script bash. Por ejemplo, en el ejemplo anterior, STRING1y STRING4aparecen consecutivamente y deberían estar allí en la salida. Tenga en cuenta que, aunque STRING5aparece dos veces, no aparece consecutivamente.

No quiero ordenar el archivo ya que el tamaño del archivo normalmente sería grande y eso agregaría sobrecarga. El usuario proporcionaría la cadena y el guión diría si la cadena aparece consecutivamente en el archivo.

Para su información, las cadenas pueden tener espacios no deseados después de ellos.

smokinguns
fuente

Respuestas:

4
$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
Ignacio Vazquez-Abrams
fuente
Hola Ignacio, gracias por la respuesta. He intentado con el comando uniq. A veces las cadenas pueden tener espacios después de ellas y en ese caso el comando uniq no puede encontrar las cadenas que aparecen consecutivamente.
smokinguns
2
Entonces, empújalos a través de un programa que elimine los espacios finales.
Ignacio Vazquez-Abrams
sed 's/ \+$//'
ceving
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
Glenn Jackman
fuente
0

¿Qué pasa con la lectura y la cadena compara? Parece la solución más fácil para mí.

while read line; do 
    if [ "$line" == "$temp" ]; then 
        echo "$line"; 
    fi; 
    temp=$line; 
done < test.txt
eresonance
fuente