$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
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.
$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
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
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
Tags bash shell-script