строка обновления на основе предыдущей строки

Существует причина, почему Вы получаете неправильный ответ. В этом случае я ожидаю, что Вы хотите считать записи каталога и не видеть сам каталог, перечисленный, как представлен единственной точечной строкой, которая является последней строкой вывода от находки.

Решение состояло бы в том, чтобы скрыть записи, которые не должны считаться из "туалета-l", примера

find .  -depth -maxdepth 1 | grep -v "^\.$" | wc -l

Так как grep может считать строки, можно использовать это для сохранения потребности запустить дополнительный исполняемый файл, пример

find . -depth -maxdepth 1 | grep -vc "^\.$"

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

find . -maxdepth 1 | grep -vc "^\.$"
6
29.03.2014, 10:53
3 ответа
[116953] Получается немного дольше, чем кажется, что на входе пустые строки. Вам может сработать следующее:

Идея состоит в том, чтобы разделить поля на [117309], [117310] и пробелы (последний, чтобы обрабатывать первую строку ввода). Проверьте, если первое поле пустое [117311] и [117312] количество полей не равно нулю (обрабатывать пустые строки), затем замените первое поле на ранее сохраненное первое поле.

C:\Python27\python
Для вашего ввода это даст:

3
27.01.2020, 20:28

С sed:

sed '/^[0-9]/{               # if line starts with digit
h                            # overwrite hold buffer with pattern space content
s/\([^,]*\),.*/\1/           # extract timestamp
x                            # exchange: put the original line back into pattern
}                            # space and the timestamp in hold space
/^,/{                        # if line starts with a comma
G                            # append hold space (timestamp) to pattern space
s/\(.*\)\n\(.*\)/\2\1/       # swap the initial line content and the timestamp 
}' infile

в одной строке:

sed -e'/^[0-9]/{h;s/\([^,]*\),.*/\1/;x' -e\} -e'/^,/{G;s/\(.*\)\n\(.*\)/\2\1/' -e\} infile
1
27.01.2020, 20:28

Другой sed:

sed '$!N;/\n,/s/\([^,]*\).*\n/&\1/;P;D' <in >out

Для каждой входной линии, которая является ! , не последний $, sed добавит NNext input line к шаблону, которому предшествует \newline символ. Затем будет предпринята попытка создания s///ubstitution, которая включает в себя копирование первой возможной группы ^, некомма-символов в пространство, непосредственно предшествующее запятой, которая непосредственно следует за \newline. Если это невозможно, то, наверное, ничего страшного. Затем

sed будет Pпрочерчивать до первой \nовечьей линии в пространстве шаблона и Dподнять ту же самую строку, прежде чем начать цикл заново сверху со следующей парой входных строк.

OUTPUT

12:33:41        unix,restarts
12:35:00,lofi4096,0,0.0,0,0,0.0,0.0
12:35:00,iscsi0,0,0.0,0,0,0.0,0.0
12:35:00,scsi_vhc,0,0.0,0,0,0.0,0.0
12:35:00,nfs1,0,0.0,0,0,0.0,0.0

12:45:00,lofi4096,0,0.0,0,0,0.0,0.0
12:45:00,iscsi0,0,0.0,0,0,0.0,0.0
12:45:00,scsi_vhc,0,0.0,0,0,0.0,0.0
12:45:00,nfs1,0,0.0,0,0,0.0,0.0
1
27.01.2020, 20:28

Теги

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