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

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 2014
Зарегистрирован: 11 июн 2017, 21:47
Решено: 29
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 431 раз
Контактная информация:

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

#1

20 июн 2022, 01:51

В процессе синхронизации нескольких Дисков Яндекс имеется необходимость записи в протокол частичной информации из итогового файла вывода по каждому их аккаунтов.
В результате выполнения команды 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 командой в одну строку?

Решение demonlibra » 20 июн 2022, 08:04
или так

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

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

Перейти к ответу ➙

Аватара пользователя

rogoznik
Сообщения: 10042
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1956 раз
Контактная информация:

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

#2

20 июн 2022, 07:37

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

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

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

Аватара пользователя

sheridan
Сообщения: 1283
Зарегистрирован: 24 фев 2020, 19:13
Решено: 14
Откуда: Алчевск
Благодарил (а): 892 раза
Поблагодарили: 467 раз
Контактная информация:

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

#3

20 июн 2022, 07:44

madesta, Попробуй:

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

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

Аватара пользователя

demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

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

#4

20 июн 2022, 08:04

или так

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

sed -n -e 3,+2p -e 7p /tmp/file1 > $file2
sed -n -e 3,5p -e 7p /tmp/file1 > $file2
В общем 3,4,5p не работает, потому что здесь задаётся диапазон, а не перечисляются номера. Задавать диапазон так нельзя.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Автор темы
madesta
Сообщения: 2014
Зарегистрирован: 11 июн 2017, 21:47
Решено: 29
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 431 раз
Контактная информация:

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

#5

20 июн 2022, 13:26

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

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей