csplit несколько файлов на несколько файлов

Возможность найдена. Я подумал, что неплохо заглянуть в /var/log/apt

find /var/log/apt/ -name '*.gz' -exec zgrep 'linux-image-4.9.0-3-amd64' {} +

Это ядро ​​появилось во время обновления до stretch.

В моем случае с

zgrep --version
zgrep (gzip) 1.6

`

2
03.01.2020, 16:58
3 ответа

Вы можете использовать этот скрипт

grep -o -P '(parameter).*(parameter)' your_teX_file.teX > questions.txt

вы получаете questions.txtфайл со всеми вопросами, после чего можете разделить его.

split -l 1 questions.txt
0
27.01.2020, 21:57

Команда csplitне имеет сохраненного контекста (и не должна ), поэтому она всегда начинает отсчет с 1. Это невозможно исправить, но вы можете сохранить свое собственное подсчитанное значение, которое вы интерполируете. в строку префикса.

В качестве альтернативы попробуйте заменить

read -ep "Type the directory and/or name of the file needed to split. If there is more than one file, enter the files separated by a space. " files

...

for i in ${files[@]}
do
    csplit $i --prefix=$save'/'$unit'q' --suffix-format='%03d.tex' /'\\question'/ '{*}'
done

с

read -a files -ep 'Type the directory and/or name of the file needed to split. If there is more than one file, enter the files separated by a space. '

...

cat "${files[@]}" | csplit - --prefix="$save/${unit}q" --suffix-format='%03d.tex' '/\\question/' '{*}'

Это один из относительно редких случаев, когда действительно нужно использовать cat {file} |..., так как csplitпринимает только один файловый аргумент (или -для stdin).

Я изменил ваше readдействие, чтобы использовать переменную массива, так как это то, что вы (правильно )пытаетесь использовать в своем for... do csplit...цикле.

Независимо от того, что вы в конечном итоге решите сделать, я настоятельно рекомендую вам дважды -заключать в кавычки все ваши переменные, где вы их используете, особенно любое дальнейшее использование списка массивов, такого как "${files[@]}".

4
27.01.2020, 21:57

С помощью Awk вы можете запустить что-то вроде:

awk '/\\question/ {i++} ; {print > "q" i ".tex"}'  exam*.tex

Если вы хотите определить out -dir (d )и тему (t )и управлять длиной номера:

awk '/\\question/ {f=sprintf("%s/%s-q%03d.tex", d, t, i++)} {print>f}' d=d1 t=t1 ex*

Чтобы пропустить преамбулу TeX, мы можем «печатать» только тогда, когда определено «f»:

awk '/\\question/ {f=sprintf("%s/%s-q%03d.tex", d, t, ++i)} 
     f            {print>f}' d=d1 t=t1 ex*
1
27.01.2020, 21:57

Теги

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