LINUX.ORG.RU
ФорумAdmin

В awk есть такая возможность: awk '! seen[$1]++', но хотелось бы ... как???


0

0

Предположи, есть файл test с таким содержимым:
123 1
234 2
123 3
234 4
678 5
123 6
876 7

Такая команда:
$ cat test | awk '! seen[$1]++'

Даст такой результат:
123 1
234 2
678 5
876 7

То есть уникльные записи по первому полю, но хотелось бы чтоб уникальная запись выводилась не первая встретившаяся, а последняя, то есть хотелось бы чтобы было вот так:

123 6
234 4
678 5
876 7

Сам порядок первого столбика не волнует, главное чтоб второй столбик соответствовал последней записи, то есть можно и так:

876 7
123 6
678 5
234 4

Можно как нить что нить подобное сделать??? Это нужно сделать используя awk без лишних конвееров, тип сначала сортируем в обртном порядке строки и т.д., всё нужно сделть в одном awk, так как файл очень большой порядка гига.. :-((


Спасибо большое...

anonymous

>Это нужно сделать используя awk без лишних конвееров,
Так не знаю.

А так подойдет?
tac test | awk '! seen[$1]++'

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

Угу, подходит... :-)) Я не знал что существует tac :-)) А как он работает??? Считывет файл, по возможности сохраняет в оперативке и потом только выводит с последней строчики???

В общем вопрос, насколько медленнее tac считывет файл, чем cat??? Мне кажется минимум в два раза.

А есть какой нить другой вриант???

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

$ awk '{ seen[$1] = $2 } END { for (i in seen) print i, seen[i] }' input
678 5
123 6
876 7
234 4
$

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

> Угу, подходит... :-)) Я не знал что существует tac :-))

tac, в отличие от rev, не стандартен. Например, в НетБСД его нет

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

А tac и rev разве равнозначны, читаем man rev:

"The rev utility copies the specified files to the standard output, reversing the order of characters in every line."

Он же строки наизнаку выворачивает, а не строки выводит в обратном порядке..

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

>В общем вопрос, насколько медленнее tac считывет файл, чем cat??? Мне кажется минимум в два раза.

Теоретически надо смотреть исходники, а практически примерно в 5 раз медленее (на файле 40Мб).

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