Страница 1 из 1

Вывод определенных строк через bash

Добавлено: 20 июн 2022, 01:51
madesta
В процессе синхронизации нескольких Дисков Яндекс имеется необходимость записи в протокол частичной информации из итогового файла вывода по каждому их аккаунтов.
В результате выполнения команды yandex-disk status выводится файл (пример):
Статус ядра синхронизации: ожидание команды
Путь к папке Яндекс.Диска: ...
Всего: 42 GB
Занято: 26.63 GB
Свободно: 15.37 GB
Максимальный размер файла: 51 GB
Размер корзины: 322.25 MB
Из этого файла нужно вывести строки 3, 4, 5 и 7
Если выводить строки 4, 5 и 7, то нормально срабатывает команда:
sed -n -e 4,5p -e 7p /tmp/file1 > $file2
Однако при дополнении вывода ещё и 3-й строкой такая команда не работает (ошибка):
sed -n -e 3,4,5p -e 7p /tmp/file1 > $file2
Пока приходится мириться с двумя последовательными командами: вывести строки с 3 по 5 и результат дополнить 7-й строкой.
sed '3,5!d' /tmp/file1 > $file2
sed -n 7p /tmp/file1 >> $file2
Имеется ли способ вывести строки 3, 4, 5, 7 командой в одну строку?

Вывод определенных строк через bash

Добавлено: 20 июн 2022, 07:37
rogoznik
madesta, а чем тебя не устраивает то что у тебя получилось?
Можно циклом пройти по строкам, считать строки и выводить нужные, но это еще больше кода чем есть у тебя.
Можно еще воспользоваться awk

Код: Выделить всё

awk -F ":" '$1 == "Всего" || $1 == "Занято" || $1 == "Свободно" || $1 == "Размер корзины" {print $0}' /tmp/file1

Вывод определенных строк через bash

Добавлено: 20 июн 2022, 07:44
sheridan
madesta, Попробуй:

Код: Выделить всё

sed -n -e 3p -e 4p -e 5p -e 7p /data/file1 > /data/file2

Вывод определенных строк через bash

Добавлено: 20 июн 2022, 08:04
demonlibra
или так

Код: Выделить всё

sed -n -e 3,+2p -e 7p /tmp/file1 > $file2
sed -n -e 3,5p -e 7p /tmp/file1 > $file2
В общем 3,4,5p не работает, потому что здесь задаётся диапазон, а не перечисляются номера. Задавать диапазон так нельзя.

Вывод определенных строк через bash

Добавлено: 20 июн 2022, 13:26
madesta
Всем спасибо :drink:
В ответ на вопрос rogoznik: не устраивало, вероятно, "стремление к прекрасному". Было чувство, что сделал немного "костыльно". Про awk ещё соображаловки не хватает разобраться. :blush:
Вариант от sheridan рассматривался в первую очередь, но чувствовал, что имеется способ правильно указать именно диапазон, но, очевидно, плохо искал конкретный пример.
Что касается варианта от demonlibra, то, как гворят, вот оно – то, что надо. :thumbs: