LINUX.ORG.RU
ФорумAdmin

awk & uniq


0

2

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

★★★★★

Последнее исправление: af5 (всего исправлений: 1)

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

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

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

>> но хотелось бы еще awk-реализацию увидеть

В руководстве по GNU awk есть пример реализации uniq на awk.

GotF ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от sdio

sdio, не могли бы вы прокомментировать свой код, что-то я не догоняю как это работает

af5 ★★★★★
() автор топика
Ответ на: комментарий от 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 ★★★★★
() автор топика
Ответ на: cat не нужен от zolden

>cat не нужен

спасибо кэп

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

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

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