В Руководстве администратора ядра указано, что параметр quiet
отключает «большинство» сообщений журнала. Возможно, вам придется использовать параметр loglevel=0
дополнительно, как предлагается здесь .
JAAOV (Еще один запутанный вариант awk...)
awk 'gsub(/[^.]/,"") { print | "wc -L" }'
Вы можете сделать это с помощьюawk
:
awk '{gsub(/[^.]/,""); len=length(); if (len>max) {max=len}} END{printf("Largest count of \".\": %d\n",max)}' file.txt
Это заменит для каждой строки все символы, которые не .
, на «ничего» (, т.е. удалит все, что не является.
). Затем он подсчитает длину оставшейся строки и сохранит наибольшее значение, найденное в max
. В конце -файла -он распечатает результат.
Кроме того, вы можете подсчитать количество определенных символов и оставить текст без изменений для дальнейшей обработки, такой как печать самой строки или подсчет другого символа. gsub возвращает количество замен.
awk '{ nDot = gsub ("[.]", "."); etc.. }'
awk -меньше ответа:
sed 's/[^.]//g' test.dat | wc -L
Другими словами, оставьте только точки и используйте параметр -L для wc
:-L, --max-line-length: print the maximum display width
Давайте создадим пример,
cat >file <<'X'
this.world.
this
1.2.3.4.5
all.is.done
X
Сperl
perl -e 'while (<>) { $x = $n if ($n = ($_ =~ y/.//)) > $x } print "$x\n"' file
4
Сawk
awk '{ gsub("[^.]", ""); if ((n = length($0)) > x) { x = n } } END { print x }' file
4
С tr
и не -расширенной версией POSIXwc
tr -cd '.\n' <file | wc -L
4
Один из способов с awk
может быть следующим. Нам нужно понять, что имеет место следующее равенство:
number of fields = number of delimiters + 1
Обратите внимание, что добавление 0
к операнду при арифметическом сравнении, хотя и не всегда необходимое, является хорошей практикой для внедрения. По крайней мере, это помогает мне думать об одной вещи меньше, потому что это становится действием авторефлекторного кодирования. Поскольку в Awk
не предусмотрены отдельные операторы для арифметического сравнения и сравнения строк, следовательно, требуется приведение, чтобы помочь устранить неоднозначность строки из математического операнда или, скорее, из контекста.
$ awk -F '[.]' '
NF>m+0 {m=NF}
END {print --m}
' file
4
$ awk '
gsub(/[^.]+/, "") &&
! index(t, $0) { t = $0 }
END { print length(t) }
' file
$ perl -lne '
my $k = tr/.//;
$k > $m and $m = $k;
}{ print $m+0;
' file
Редактор GNU sed
также можно использовать вместе с утилитой двоичного калькулятора bc
. Идея состоит в том, что мы сохраняем строки очищенными от всех точек, отличных от -, а текущая самая длинная строка чистых точек удерживается. В eof
мы преобразуем точки в действенный код bc
, чтобы сгенерировать количество этих точек.
$ sed -Ee '
s/[^.]+//g;G
/^(.*)..*\n\1$/!ba
s/\n.*//;h;:a
$!d;g;s/./1+/g;s/$/0/
' file | bc -l