После некоторых обсуждений с ребятами из компании, стоящей за OPNsense, я удалось решить мою проблему.
Мой дальний шлюз находился в /56. Даже если мой IPv6 не является /56, установка моего IPv6 с префиксом /56 вместо /64 исправила мою проблему.
Это связано с тем, что реализация IPv6 NDP во FreeBSD не может найти IPv6-адрес шлюза, который не считается прямым соседом.
Это текстовый файл или более сложный (PDF, WORD и т. д. )? Возможно, вам стоит попробовать встроенную команду split
. это работает примерно так
split -l1000 textfile
Текстовый файл будет разделен на несколько файлов по 1000 строк в каждом.
Предположим, что каждая страница начинается с^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
больше нуля,мы требуем, чтобы хотя бы один маркер страницы был проанализирован, прежде чем что-либо выводить.
Вот еще вариант. Этот привязывается к символу ^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_????
Если можно использовать старый добрый gnu split:
split -t '^L' -l 500 bigFile part_
-t '^L'
-разделитель единиц ^Lотдельно в файлах по 500 штук
в bash, чтобы ввести ^L , мы должны ввести ^V^L . Также возможно использовать восьмеричное представление:split -t $'\014'...