Bir dosyada art arda görünen dizeleri bulun


1

Hepsi,
her satırda dizgilerin aşağıdaki biçimde göründüğü bir dosyam var:

STRING1  
STRING2  
STRING1  
STRING1  
STRING1   
STRING3  
STRING4  
STRING4  
STRING5  
STRING6  
STRING5 

Hangi dizelerin ardışık olarak bash betiğini kullanarak görüneceğini bulmak istiyorum. Örneğin, yukarıdaki örnekte de, STRING1ve STRING4arka arkaya görünür ve çıktıda olmalıdır. Not, STRING5iki kez görünmesine rağmen, art arda görünmüyor.

Dosya boyutunu normalde büyük olacağı ve ek yük getireceği için dosyayı sıralamak istemiyorum. Kullanıcı dizeyi tedarik eder ve komut dosyası dizede ardışık olarak görünüp görünmediğini söyler.

Bilginize, dizeleri onlardan sonra istenmeyen boşluklar olabilir.

Yanıtlar:


4
$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4

Hey Ignacio, Cevabınız için teşekkürler. Uniq komutunu denedim. Bazen dizgilerde boşluklar olabilir ve bu durumda uniq komutu ardışık görünen dizeleri bulamaz.
smokinguns

2
Öyleyse onları takip eden boşlukları soran bir program boyunca ittirin.
Ignacio Vazquez-Abrams

sed 's/ \+$//'
03'te 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

0

Peki ya okuma ve string karşılaştırması? Bana en kolay çözüm gibi görünüyor.

while read line; do 
    if [ "$line" == "$temp" ]; then 
        echo "$line"; 
    fi; 
    temp=$line; 
done < test.txt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.