#linux #shell #unix #uniq
#linux #оболочка #unix #uniq
Вопрос:
Согласно странице руководства для uniq
опция -f предназначена для пропуска полей
опция -s для пропуска символов
Может кто-нибудь объяснить на соответствующих примерах, как на самом деле работают эти две опции?
Комментарии:
1. -1. Кажется, вы перечисляете все команды UNIX и задаете вопросы, чтобы прояснить для вас справочную страницу. Помимо Google, я предлагаю unix.stackexchange.com
Ответ №1:
Ванильный uniq
:
/tmp$ cat > foo
foo
foo
bar
bar
bar
baz
baz
/tmp$ uniq foo
foo
bar
baz
uniq -s
чтобы пропустить первый символ:
/tmp$ cat > bar
1foo
2foo
3bar
4bar
5bar
6baz
7baz
/tmp$ uniq -s1 bar
1foo
3bar
6baz
uniq -f
чтобы пропустить первое поле ввода (здесь, hosts):
/tmp$ cat > baz
127.0.0.1 foo
192.168.1.1 foo
example.com bar
www.example.com bar
localhost bar
gateway1 baz
192.168.1.254 baz
/tmp$ uniq -f1 baz
127.0.0.1 foo
example.com bar
gateway1 baz
Ответ №2:
Для меня это выглядит понятно, но в любом случае вы начинаете.
-f
пропускает поля. Итак
(ol)noufal@sanitarium% echo "a b cnd e c" | uniq -c
1 a b c
1 d e c
выводит две отдельные строки, но если вы пропустите первые два поля (-f2) и сравните только последнее,
(ol)noufal@sanitarium% echo "a b cnd e c" | uniq -c -f2
2 a b c
они оба одинаковые.
Аналогично,
(ol)noufal@sanitarium% echo "abcndec" | uniq -c
1 abc
1 dec
(ol)noufal@sanitarium% echo "abcndec" | uniq -c -s2
2 abc
Мы пропускаем здесь первые два символа (вместо полей).
Что касается определения полей, то в руководстве это есть.
Поле представляет собой набор пробелов (обычно пробелов и / или табуляции), затем непустых символов.