как параметры -f, -s работают с командой uniq?

#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
  

Мы пропускаем здесь первые два символа (вместо полей).

Что касается определения полей, то в руководстве это есть.

Поле представляет собой набор пробелов (обычно пробелов и / или табуляции), затем непустых символов.