LINUX.ORG.RU

uniq

 ,


0

3

Всем добрый день. Подскажите,пожалуйста,как воспользоваться командой uniq так,чтобы уникальность определялась только по первому полю,а остальня часть строк не проверялась? Например: hello 123\n hello 345\n hello 567\n Нужно вывести: hello 123

По какому первому полю? Жисть...
В вашем примере 3 разных строки, логично что все они попадают в результат в силу своей уникальности. Если вам просто нужно первую строку, используйте head, скажем

head -n 1 /path/to/file
Короче, Кастрюля, ну что за «первое поле». Ничего не понятно :)

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

Поля — это фрагменты строк, разделенные пробелами. Даже если не знать, легко догадаться.

Сам не знаю как решить стандартными командами. Я бы набросал скрипт на Python.

anonymous ()

Что нибудь типа

awk 'BEGIN{w=""}{if(w!=$1){w=$1;print}}'

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

А, понял. Ну тогда какой-нибудь awk. Тут вот на SO и в любой части строки вырезают. Просто нужен конкретный разделитель этих самых «колонок». Изначально я не понял задачу ТС, ибо там переносы строк. И он пишет не «остальня часть строки не проверялась», а именно «остальня часть строк не проверялась». Кто ж в этом разберется.
P.S.: ссылка на SO:
http://stackoverflow.com/questions/30626327/uniq-skipping-middle-part-of-the-...

znenyegvkby ()

Использовать команду sort и -u -k

anonymous ()

Если поля фиксированной длины, как в примере, то можно:

$ echo -e " hello 123\n hello 345\n hello 567\n" | uniq -w6
 hello 123

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