Тестирование двух соседних строк - PullRequest
2 голосов
/ 27 марта 2012

У меня есть файл со строками, и я хочу сравнить строки, которые следуют одна за другой, чтобы проверить, совпадают ли они, за исключением последнего столбца. Например:

example/example 321
example/example 456
otherexample/otherexample 321

В этом случае я хочу, чтобы программа просто возвратила:

example/example

Как первый столбец совпадает, но второй столбец отличается. Каков наилучший способ сделать это с помощью инструментов Unix? До сих пор я пробовал awk , но добился небольшого успеха. Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 27 марта 2012
# sample data
$ cat input.txt
example/example 321
example/example 456
example/example 789
otherexample/otherexample 321
abc
otherexample/otherexample 321

$ awk 'x==$1{print $1; while(getline){if(x!=$1)break}}{x=$1}' input.txt
example/example
0 голосов
/ 27 марта 2012

Это может работать для вас:

cut -d' ' -f1 file | sort | uniq -d

или это:

 sort file | sed '$!N;/^\(\S*\) .*\n\1.*/!D;bb;:a;$!N;:b;s//\1/;ta;P;D'
0 голосов
/ 27 марта 2012
sort -u temp.txt|awk '{a[$1]++}END{for (i in a){if(a[i]>1)print i;}}'
0 голосов
/ 27 марта 2012

В одну сторону:

Содержимое script.awk:

## In first line, get path and init counter of consecutive paths.
FNR == 1 { 
    path = $1
    repeats = 1 
    next
}

FNR > 1 { 
    ## If current path is same as previous one, increment counter.
    if ( path == $1 ) { 
        ++repeats;
    }   
    ## Else, there is new path, so print previous and init counter.
    else {
        print_repeated_path( repeats, path )
        path = $1
        repeats = 0 
    }   
}

END {
    print_repeated_path( repeats, path )
}

function print_repeated_path(r, path) {
    if ( r > 1 ) { 
        printf "%s\n", path
    }   
}

Содержимое infile:

example/example 321
example/example 456
otherexample/otherexample 321
other/example 456
other/example 678
other/example 123
otherexample/otherexample 321

Запустите его как:

awk -f script.awk infile

Со следующим результатом:

example/example
other/example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...