Как считать файл линию за линией и распечатать предыдущую строку, где файл содержит единственный маркер

Сервер DNS помог бы Вам здесь. Вы могли установить клиенты, чтобы получить IP от DHCP и использовать динамический DNS, чтобы позволить клиентам обновить сервер DNS, когда они получают новый IP.

Посмотрите следующую ссылку для примера с сервером DNS BIND

1
15.02.2016, 12:40
3 ответа

Можно использовать awk:

awk 'NF == 1 { print LAST } { LAST=$0 }' < datafile

Это сохраняет каждую строку файла (LAST=$0) по ходу, а когда в строке только одна запись (NF == 1 - NF - это количество лексем на строке, грубо говоря) выводит сохраненную предыдущую строку наружу.

7
27.01.2020, 23:11

Если у вас только одно появление маркера, вы можете сделать это с помощью GNU grep и головки :

grep -x -B 1 10 file | head -n 1

-B 1 говорит grep, чтобы вывести на печать строку соответствия и строку перед ней. При использовании опции -x, grep 10 соответствует строке ex actly 10 (в отличие от , содержащей 10). Наконец, головка -n 1 печатает только первую из полученных строк.

2
27.01.2020, 23:11

sed

Можно использовать sed:

sed -e '/^10$/{x;p;}' -e 'x;d' < datafile

Пояснение:

Адрес /^10$/ совпадает со строкой, содержащей 10. Когда он совпадает, выполняется следующая серия команд, {x;p;}, которая обменивает (x) пространство удержания с пространством шаблона, а затем печатает (p) пространство шаблона.

Пространство удержания содержит предыдущую строку из-за остальной части скрипта. Для каждой строки файла, обменяйте (x) пространство удержания с пространством шаблона, а затем удалите (d) все, что находится в пространстве шаблона.

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

.
1
27.01.2020, 23:11

Теги

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