Как напечатать недублированные строки на основе поля с AWK? - PullRequest
1 голос
/ 10 декабря 2010

Я хочу напечатать недублированные строки на основе 1-го поля, используя AWK. Может ли кто-нибудь, пожалуйста, любезно помочь?

Спасибо

    Input 

    1 28324 2077 2 1
    1 24682 2088 1 0
    1 25399 2074 1 0
    2 28925 1582 2 1
    3 30254 1450 1 0
    4 25552 1131 1 1
    4 31033 1134 1 0
    5 29230 1522 2 0


    Desired Output 
    2 28925 1582 2 1
    3 30254 1450 1 0
    5 29230 1522 2 0

Ответы [ 3 ]

3 голосов
/ 10 декабря 2010
awk '
(count[$1]++ < 1) { data[$1] = $0; }
END               { for (x in data) if (count[x] == 1) print data[x]; }
'

Если выходные данные должны быть отсортированы по первому столбцу, пропустите через sort -nk1.

1 голос
/ 15 декабря 2010

Для фиксированного количества символов в первом столбце и реализации uniq , которая поддерживает параметр -w :

sort infile|uniq -uw1
1 голос
/ 10 декабря 2010

Если ваши данные отсортированы, вы можете использовать их, которые не накапливают потенциально большой массив.

awk '
    $1 != prev { if (count == 1) print line; count = 0 }
               { prev=$1; line = $0; ++count }
           END { if (count == 1) print }' inputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...