Это означает, что рассматриваемая файловая система была смонтирована во время выполнения проверки, fsck
пришлось фактически изменить данные на -диске, чтобы исправить ошибку, и файловая система не может быть перемонтирована вручную без перезагрузки системы..
В основном это происходит, когда ошибки обнаруживаются (и исправляются )в корневой файловой системе. Если у вас нет действительно причудливой среды initramfs или восстановления, из которой вы проверяете файловую систему, вы запускаете корневую файловую систему во время ее проверки (, поэтому она монтируется только для чтения -).
Из соображений производительности ядро не выполняет повторную проверку кэшированных метаданных для смонтированных файловых систем (, поскольку ничто (кроме fsck
не должно изменять данные на -диске, кроме ядра для смонтированной файловой системы ), поэтому, если fsck
нужно исправить некоторые из этих метаданных, необходимо либо уведомить ядро (, что невозможно в большинстве UNIX-систем ), либо указать пользователю размонтировать файловую систему, а затем смонтировать это снова, чтобы заставить ядро подобрать измененные метаданные. Единственный способ сделать это с корневой файловой системой — фактически перезапустить саму систему.
$ awk -F':' '(NR>1) && ($1!=prev){c++} {prev=$1} END{print c+0}' file
2
Использованиеawk
$ awk -F"[a-z]|:" '! count[$7]++ {cnt++} END {print cnt + 0}' input_file
2
Подсчет уникального значения после слова Speaker
, но перед:
В модуле Python itertools
есть метод groupby
, который группирует данные по ключам при каждом изменении значения ключа. Мы делаем первое поле разделенным двоеточием в качестве нашего ключа и группируем вокруг него.
python3 -c 'import sys, itertools as it
k,g = -1,lambda x: x.split(":")[0]
with open(sys.argv[1]) as f:
for t in it.groupby(f,g): k += 1
print(k)
' file
2
GNU sed
может сделать это, просматривая две строки одновременно. Когда первые поля, разделенные двоеточием, различаются, мы добавляем к удержанию новую строку. В eof напечатайте удержание после удаления одной новой строки, чтобы учесть новую строку, неявно добавленную sed во время печати.
sed -En '
$!N
/^([^:]+:).*\n\1/!{x;s/$/\n/;x;}
$!D
g;s/.//p
' file|wc -l
Perl в режиме slurp (0777 ), используя силу регулярных выражений,удалить последовательные повторяющиеся строки с одинаковыми первыми полями, разделенными двоеточием. Затем подсчитайте количество новых строк.
perl -pl -0777 -e '
s/^(([^:]+:).*\n)(?:\2.*\n)+/$1/mg;
$_ = tr/\n// -1;
' file
Использование Raku (, ранее известного как Perl _6)
raku -e '(-1 + slurp.split(/<[:\v]>/)[0,2,4...*]>>.match(/\d+$/).[0..(*-2)]>>.Int.squish.elems).say;'
ИЛИ
raku -e '(-1 + slurp.comb(/ ^^ \w+ <(\d+)> \: \s /).squish.elems).say;'
Кратко (второе решение, выше ), slurp
файл, comb
выбрать элементы, соответствующие (в порядке)^^
начало -строки -, \w+
alnum (s ), \:
двоеточие и \s
пробел, с помощью оператора <(…)>
отбросить все, кроме цифр, squish
смежные одинаковые цифры, оставив только одну, получить количество elems
элементов, затем-1
(вычесть единицу )и say
ответ.
Образец ввода (OP, продублированные 2 раза):
Speaker1: Hello.
Speaker2: Hi.
Speaker2: How are you?
Speaker1: Well thanks..
Speaker1: Hello.
Speaker2: Hi.
Speaker2: How are you?
Speaker1: Well thanks..
Speaker1: Hello.
Speaker2: Hi.
Speaker2: How are you?
Speaker1: Well thanks..
Пример вывода(perl6 -e 'slurp.comb(/ ^^ \w+ <(\d+)> \: \s /).say;'
)
(1 2 2 1 1 2 2 1 1 2 2 1)
Пример вывода(perl6 -e 'slurp.comb(/ ^^ \w+ <(\d+)> \: \s /).squish.say;'
)
(1 2 1 2 1 2 1)
Пример вывода (окончательный,вторая строка кода сверху):
6