Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Вывод строк с одинаковым содержимым N-ого поля  (Прочитано 1721 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Есть для примера вывод сторок вида:
(размер в байтах путь к файлу)
93 ./path/to/file.ext
105 ./path/to/fil2.ext
586 ./path/to/file3.ext
586 ./path/to/file4.ext
56789 ./path/to/file5.ext
...

отсортированный (sort -nk1) по первому полю.
Как можно вывести строки с одинаковым размером байт?
Uniq'ом не выходит.
Спасибо.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
удалил
« Последнее редактирование: 12 Июня 2016, 03:53:46 от victor00000 »
Wars ~.o

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
victor00000,
и что? Нужно вывести строки с одинаковым размером.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
удалил
« Последнее редактирование: 12 Июня 2016, 03:52:48 от victor00000 »
Wars ~.o

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
victor00000,
На баше не вариант, такое и сам городил. Лучше на awk одной строкой для пайпа.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
victor00000,
На баше не вариант, такое и сам городил. Лучше на awk одной строкой для пайпа.

 :o
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
| sed 's/\s\+/          /' | uniq -D -w10
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Azure,
Работет, но это только для первого поля, а если нужно будет только для второго поля или третьего? и длина слов не постоянна. Есть ли способ?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Cxms, | sed 's/\s\+/          /2' | uniq -D -w10 -f1
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Azure,
Понял, оно. отлично, спасбо.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Не очень красиво, зато 1 sed| sed ':2;/\n/{P;D};:1;$!N;/^\(\S\+\s\).*\n\1[^\n]\+$/b1;/\n.*\n/b2;D'(для других полей чуть отредактировать регулярку)
« Последнее редактирование: 12 Июня 2016, 11:55:47 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
ого, интересно. а что подправить для нужного поля? по скорости не хуже первого варианта?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
что подправить для нужного поля?
добавить нужное количество полей \(\S\+\s\+\)\{1\}| sed ':2;/\n/{P;D};:1;$!N;/^\(\S\+\s\+\)\{1\}\(\S\+\s\).*\n\(\S\+\s\+\)\{1\}\2[^\n]\+$/b1;/\n.*\n/b2;D'| sed -r ':2;/\n/{P;D};:1;$!N;/^(\S+\s+){1}(\S+\s).*\n(\S+\s+){1}\2[^\n]+$/b1;/\n.*\n/b2;D'
по скорости не хуже первого варианта?
Проверь ;)
« Последнее редактирование: 12 Июня 2016, 11:55:33 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Понятно, но длинно и сложно. Может на awkе будет короче и проще?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
| awk 'f == $field {if (first) {print first ; first=""} ; print ; next} {f = $field ; first = $0}' field=2
« Последнее редактирование: 12 Июня 2016, 12:26:53 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.07 секунд. Запросов: 25.