как опции -f, -s работают с командой uniq? - PullRequest
0 голосов
/ 10 ноября 2011

Согласно странице руководства для uniq

опция -f предназначена для пропуска полей

опция -s для пропуска символов

Может кто-нибудь объяснить с соответствующими примерами, какна самом деле эти два варианта работают?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Ваниль 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, чтобы пропустить первое поле ввода (здесь, хосты):

/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
0 голосов
/ 10 ноября 2011

Мне это кажется ясным, но все равно вы идете.

-f пропускает поля. Так

(ol)noufal@sanitarium% echo "a b c\nd e c" | uniq -c
      1 a b c
      1 d e c

печатает две отдельные строки, но если пропустить первые два поля (-f2) и сравнить только последние,

(ol)noufal@sanitarium% echo "a b c\nd e c" | uniq -c -f2
      2 a b c

они оба одинаковые.

Аналогично,

(ol)noufal@sanitarium% echo "abc\ndec" | uniq -c
      1 abc
      1 dec
(ol)noufal@sanitarium% echo "abc\ndec" | uniq -c -s2
      2 abc

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

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

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

...