Путем "усечения файла" без информирования (или перезапуска )программ, записывающих в файл журнала, ВЫ создали разреженный файл.
Лучшее решение — найти и устранить проблему, вызывающую все эти сообщения в журнале.
Еще один способ избежать этой проблемы: остановить службу ведения журнала, использовать lsof
, чтобы убедиться, что файл не открыт другими процессами, затем обрезать файл и перезапустить ведение журнала.
В соответствии с запросом, вот модель того, как это (не работает ):
Программа открывает файл для «добавления», ей сообщают, что файл заканчивается в блоке X, и записывает блок X+1. Вы «обрезаете файл», но программа «знает», что следующий блок для записи — это X+2. Таким образом, файл может давать данные в начале, но точно иметь данные в блоке X+2. Та -Да! Разреженный файл.
Ты этого хочешь?
sed -n '/^SCN/,/^\s*$/p' LOG.TXT
Он печатает строки между двумя шаблонами (и строки, которые их содержат):
^SCN
)^\s*$
)и выводит следующее:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
В вашем случае на ум приходит awk
программа:
awk '/^SCN/{f=1} !NF{f=0} f' LOG.TXT > JUNCTIONS.TXT
Это будет
f
на 1
, если строка начинается сSCN
0
при обнаружении пустой строки (в этом случае мы разрешаем "визуально пустые" строки, накладывая условие, что текстовые поля не найдены, а не символы вообще отсутствуют)1
Несколько проще, используя диапазоны адресов вместо явных флагов:
awk '/^SCN/,/^[[:space:]]*$/' LOG.TXT > JUNCTIONS.TXT
Вывод для вашего примера будет:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
В первом примере не печатались разделяющие пустые строки.