LINUX.ORG.RU
ФорумAdmin

awk & uniq


0

2

вот такой однострочник
cat file |awk '{print ($2, $3)}' | uniq
печатает неповторяющиеся строчки
а как сделать чтобы дополнительно скипались строки у которых только $3 повторяется?

★★★★★

Ответ на: комментарий от anonymous

хм... в принципе думаю пойдёт, спасибо!
но хотелось бы еще awk-реализацию увидеть, может без uniq обойтись можно вообще?

af5 ★★★★★ ()
Ответ на: комментарий от GotF

Спасибо, но я расчитывал остаться в рамках однострочника :)

af5 ★★★★★ ()

af5> печатает неповторяющиеся строчки

cat file |awk 'uniq[$2" «$3] == 0 {print ($2, $3); uniq[$2» «$3] = 1}'

а как сделать чтобы дополнительно скипались строки у которых только $3 повторяется?

cat file |awk 'uniq[$3] == 0 {print ($2, $3); uniq[$3] = 1}'

sdio ★★★★★ ()
Ответ на: комментарий от af5

awk 'uniq[$2" «$3] == 0 {print ($2, $3); uniq[$2» «$3] = 1}'

uniq — hash

uniq[$2» «$3] — hash по строке, состоящей из полей $2 и $3 разделенных пробелом.

Если строки $2» «$3 еще не было, то хэш по этой строке не существует (в awk равен 0), то печатаем строку и вписываем 1 в хэш по строке $2» «$3

В след. раз хэш по строке $2» «$3 не будет равен 0 и блок {print ($2, $3); uniq[$2» «$3] = 1} не выполнится

sdio ★★★★★ ()
Ответ на: комментарий от sdio

sdio, я чуть моск не сломал пока до меня дошло что uniq это у вас не команда =)

af5 ★★★★★ ()
Ответ на: комментарий от geekless

спасибо, забавно. Действительно ,cat в такого рода скриптах нужен очень редко, мне известен единственный вариант - с tar, который не может распаковывать по маскам и приходится делать что-то вроде cat *.tar | tar -Oxi

zolden ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.