напечатать столбец с уникальным значением - PullRequest
0 голосов
/ 06 января 2019

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

VZTFARATGJBBCEGIM01 RGROUP-GIMAGES
VZTFARATGJBFFEGIM01 RGROUP-GIMAGES
VZTFARATGJBSTEGIM01 RGROUP-GIMAGES
VZTFARATGJBBCE024701 RGROUP-ENV0247
VZTFARATGJBFFE024701 RGROUP-ENV0247
VZTFARATGJBSTE024701 RGROUP-ENV0247
VZTFARATGOD11E024701 RGROUP-ENV0247
GROUP-ENV0247
VZTFARATGJBBCE024701
VZTFARATGJBFFE024701
VZTFARATGJBSTE024701
VZTFARATGOD11E024701

GROUP-GIMAGES
VZTFARATGAWSTEGIM01
VZTFARATGENTFEGIM01
VZTFARATGJBBCEGIM01
VZTFARATGJBFFEGIM01

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Использование GNU awk и 2D-массивов для устранения дубликатов в $1:

$ awk '{
    a[$2][$1]           # hash to a. This weeds out duplicates in $1
}
END {
    for(i in a) {       # all groups
        print i         # output name
        for(j in a[i])  # all group members
            print j     # output member
        print ""        # empty line after each group
    }
}' file

Выход:

RGROUP-ENV0247
VZTFARATGOD11E024701
VZTFARATGJBSTE024701
VZTFARATGJBBCE024701
VZTFARATGJBFFE024701

RGROUP-GIMAGES
VZTFARATGJBBCEGIM01
VZTFARATGJBSTEGIM01
VZTFARATGJBFFEGIM01

Еще один для не-GNU awks. Использование match для проверки наличия дубликатов в a[$2]:

$ awk '
{
    if(!match(a[$2],"(^|\n)" $1 "($|\n)"))
    a[$2]=a[$2] "\n" $1
}
END {
    for(i in a) {
        print i a[i]
        print ""
    }
}

В конце будет лишняя пустая строка.

0 голосов
/ 06 января 2019

Вот решение в awk.

awk -F'[ ]' '{ b[$2]=b[$2]  $1 "\n" } END { for (c in b) { print c; print b[c] }}' test.txt

Где test.txt содержал значения:

VZTFARATGJBBCEGIM01 RGROUP-GIMAGES 
VZTFARATGJBFFEGIM01 RGROUP-GIMAGES 
VZTFARATGJBSTEGIM01 RGROUP-GIMAGES 
VZTFARATGJBBCE024701 RGROUP-ENV0247 
VZTFARATGJBFFE024701 RGROUP-ENV0247 
VZTFARATGJBSTE024701 RGROUP-ENV0247 
VZTFARATGOD11E024701 RGROUP-ENV0247

И вывод выглядит так:

RGROUP-ENV0247
VZTFARATGJBBCE024701
VZTFARATGJBFFE024701
VZTFARATGJBSTE024701
VZTFARATGOD11E024701

RGROUP-GIMAGES
VZTFARATGJBBCEGIM01
VZTFARATGJBFFEGIM01
VZTFARATGJBSTEGIM01

И как это работает:

awk -F'[ ]'   // deliminate on empty space
'{ 
    // add value to associated array and append with newline
    b[$2]=b[$2]  $1 "\n"
} 
END { 
  // print out each 'key', and their respective values
  for (c in b) { 
    print c; print b[c] 
  }
}' 
test.txt      // file to read from 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...