В чем смысл uniq -u и что он делает?

Похоже на неисправный диск. Я бы порекомендовал проверить значения SMART диска, запустив sudo smartctl -a /dev/sdX.

Если накопитель исправен, возможно, накопитель перешел в режим пониженного энергопотребления. Если это произойдет снова, вы можете попытаться сделать управление питанием менее агрессивным, запустив sudo hdparm -B 127 /dev/sdX. Для получения дополнительной информации об этом обратитесь к справочной странице hdparm.

14
17.11.2020, 14:27
2 ответа

Это должно быть легко проверить:

$ cat file
1
2
3
3
4
4
$ uniq file
1
2
3
4
$ uniq -u file
1
2

Короче говоря, uniqбез опций удаляет все экземпляры последовательно дублирующихся строк, кроме одного. Руководство GNU uniqформулирует это как

With no options, matching lines are merged to the first occurrence.

, тогда как POSIX говорит

[...] write one copy of each input line on the output. The second and succeeding copies of repeated adjacent input lines shall not be written.

С опцией -uон удаляет все экземпляры последовательно дублированных строк и оставляет только те строки, которые никогда не дублировались. В руководстве GNU uniqговорится

only print unique lines

и POSIX говорит

Suppress the writing of lines that are repeated in the input.

37
18.03.2021, 22:49

Принимая во внимание комментарий оригинального постера к принятому ответу, я считаю, что другой пример может быть полезен для иллюстрации разницы и смысла команд.

Допустим, у нас есть некоторая часть текста, в которой строки разделены дублирующими пустыми строками по какой-то причине и с одной пустой строкой в ​​начале и в конце:

$ cat declaration_quote.txt

We hold these truths to be self-evident, that all men are created equal, that


they are endowed by their Creator with certain unalienable Rights, that among


these are Life, Liberty and the pursuit of Happiness.

Если вы решите, что одной пустой строки достаточно, вы можете использовать uniq, чтобы получить

  • каждая строка, которая не повторяется непосредственно выше и ниже (, которые являются строками с текстом здесь и одиночными пустыми строками в начале и в конце )и
  • строка из каждой группы смежных повторяющихся строк (, которые здесь являются пустыми строками, за исключением одной в начале и одной в конце ).

Это не «все только один раз », а скорее «один раз из каждой непрерывной группы », потому что вы получите отдельную пустую строку из каждой группы пустых строк. Это уже не раз. Кроме того, пустые строки в начале и в конце остаются, потому что нет пустых строк непосредственно выше или ниже.

$ uniq declaration_quote.txt 

We hold these truths to be self-evident, that all men are created equal, that

they are endowed by their Creator with certain unalienable Rights, that among

these are Life, Liberty and the pursuit of Happiness.

Если вы решите, что вам вообще не нужен такой двойной интервал, вы можете использовать uniq -uдля получения только каждой строки, которая не повторяется непосредственно в строках выше или ниже. Но это все еще не "только то, что появляется один раз ", потому что оно не удалит одиночные пустые строки (в начале и в конце ), даже если есть много других пустых строк в текст. Это скорее «только то, что не повторяется сразу ».

$ uniq -u declaration_quote.txt

We hold these truths to be self-evident, that all men are created equal, that
they are endowed by their Creator with certain unalienable Rights, that among
these are Life, Liberty and the pursuit of Happiness.

5
18.03.2021, 22:49

Теги

Похожие вопросы