разделил документ 1200 страниц на 500 страниц, а затем оставшиеся

После некоторых обсуждений с ребятами из компании, стоящей за OPNsense, я удалось решить мою проблему.

Мой дальний шлюз находился в /56. Даже если мой IPv6 не является /56, установка моего IPv6 с префиксом /56 вместо /64 исправила мою проблему.

Это связано с тем, что реализация IPv6 NDP во FreeBSD не может найти IPv6-адрес шлюза, который не считается прямым соседом.

-> Ссылка на тему в списке рассылки FreeBSD.

1
20.09.2017, 09:28
4 ответа

Это текстовый файл или более сложный (PDF, WORD и т. д. )? Возможно, вам стоит попробовать встроенную команду split. это работает примерно так

split -l1000 textfile

Текстовый файл будет разделен на несколько файлов по 1000 строк в каждом.

-2
27.01.2020, 23:11

Предположим, что каждая страница начинается с^L(литерала Ctrl+L):

awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } { print > f }' file.txt

Это будет подсчитывать строки с ^L, и если количество минус 1 составляет 500 (страница 1, страница 501, страница 1001 и т. д. ), переменная fбудет установлена ​​в имя файла. для вывода следующего текста.

^Lв коде awk— это не два символа ^и L, а литерал Ctrl+L(вы можете ввести это с Ctrl+VCtrl+L). Вы также можете использовать \014вместо этого.

Для небольшого тестового документаtest.txt:

^L
page 1
^L
page 2
^L
page 3
^L
page 4

... и изменив 500 на 2 для тестирования, это создает два файла, test.txt-page-1.txtи test.txt-page-3.txt, каждый из которых содержит две строки (маркер страницы и текст )из входного файла.

test.txt-page-1.txt:

^L
page 1
^L
page 2

test.txt-page-3.txt:

^L
page 3
^L
page 4

Файлы, которые должны быть проанализированы, по-видимому, имеют заголовок перед маркером первой страницы. Этот заголовок следует игнорировать. Следующий вариант приведенной выше команды awkделает это:

awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } p > 0 { print > f }' file.txt

Ограничивая вывод до тех пор, пока pбольше нуля,мы требуем, чтобы хотя бы один маркер страницы был проанализирован, прежде чем что-либо выводить.

7
27.01.2020, 23:11

Вот еще вариант. Этот привязывается к символу ^L (. Я предполагаю, что это один символ, восьмеричный 014, а не два литерала ^ и L). Для вашего исходного файла данных с именем original.txtкаждая страница будет разделена на отдельный файл. Оттуда вы можете объединить их в необходимые куски:

# GNU csplit
csplit --prefix='page_' --digits=4 original.txt $'/\014/+1' '{*}'

# MKS csplit
csplit -f 'page_' -n 4 -k original.txt $'/\014/+1' '{9999}'

# Concatenate the required sets of pages together
cat page_{0000..0499} > part_1.txt
cat page_{0500..0999} > part_2.txt
cat page_{1000..9999} > part_3.txt

# Tidy up
rm page_????
3
27.01.2020, 23:11

Если можно использовать старый добрый gnu split:

split -t '^L' -l 500 bigFile part_ 
  • -t '^L'-разделитель единиц ^L
  • отдельно в файлах по 500 штук

  • в bash, чтобы ввести ^L , мы должны ввести ^V^L . Также возможно использовать восьмеричное представление:split -t $'\014'...

1
27.01.2020, 23:11

Теги

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