1

Все,
У меня есть файл, где строки появляются в каждой строке в следующем формате:

STRING1  
STRING2  
STRING1  
STRING1  
STRING1   
STRING3  
STRING4  
STRING4  
STRING5  
STRING6  
STRING5 

Я хочу выяснить, какие строки появляются в файле последовательно, используя скрипт bash. Например, в приведенном выше примере STRING1 и STRING4 появляются последовательно и должны присутствовать в выходных данных. Обратите внимание, что хотя STRING5 появляется дважды, он не появляется последовательно.

Я не хочу сортировать файл, так как размер файла обычно был бы большим, и это добавляло бы накладные расходы. Пользователь предоставит строку, и скрипт скажет, появляется ли строка последовательно в файле.

К вашему сведению, строки могут иметь нежелательные пробелы после них.

3 ответа3

4
$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
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
0

Как насчет чтения и сравнения строк? Похоже, самое простое решение для меня.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .