LINUX.ORG.RU

Рекурсивный вывод строк с их номерами

 


0

1

Задание:Рекурсивно вывести содержимое файлов с номерами строк из директории lab0, имя которых заканчивается на ‘r’, строки отсортировать по имени a->z, ошибки доступа перенаправить в файл в директории /tmp

Команда которую я использую: ls -R lab0/* | grep 'r$' | sort | xargs cat -n

В lab0 у меня нет подобных файлов, но они есть в подкаталогах, поэтому я использую lab0/*, вот только при выполнении команды cat, bash пишет что таких файлов нет:«cat: gengar: No such file or directory». Правильно ли я понимаю что я не так передаю ответ в cat? Если да, то что нужно подправить

Что-то Вы напутали чутка, по-моему.

Рекурсивно вывести

ls для этого не подойдёт - он выводит не рекурсивно

строки отсортировать по имени

а Вы сортируете не содержимое, а имена файлов

Вообще задание какое-то невнятное. И кто так формулирует? «рекурсивно вывести» - что это вообще значит? :)
«заканчиваются на r» - строки или имена файлов всё-таки?..

PeleWin
()
Последнее исправление: PeleWin (всего исправлений: 1)
Ответ на: комментарий от superuser

я если честно уже около недели ломаю голову над этой командой, только она мешает мне сдать скрипт под эту лабораторную работу. Практик предложил использовать cat -n r*, но тогда скрипт выдаёт другую ошибку, о том что нет файла или директории r*

acrighthere
() автор топика

вот только при выполнении команды cat, bash пишет что таких файлов нет

При выполнении ls -R lab0/ оно выводит название каталога и потом названия файлов в нем. Следовательно, на вход cat -n получает пачку названий файлов. И поскольку в текущем каталоне оно не находит таких файлов – ругается No such file or directory.

Тут даже речь не идет о знании баша… Тут банальная логика, если посмотреть что выводит ls -R ....

iron ★★★★★
()
Ответ на: комментарий от superuser

часть chat gpt,часть одногруппник. Практик мне посоветовал:" вариант cat -n r* ну и рекурсивно в контексте лабы можно просто добавить /r //r* и так далее." Это именно про вывод я его спрашивал, то есть конечно целая команда должна быть больше чем он мне написал

acrighthere
() автор топика
Ответ на: комментарий от kaldeon

Проблема в том, что за использование find нас как сказал лектор могут если культурно выразится «послать». Он сказал что в таком случае практик задаст вам пару углубленных вопросов по команде, на которые он уверен, что мы не ответим. Использование find в целом очень сильно упростило бы лабораторную работу в целом)

acrighthere
() автор топика
Ответ на: комментарий от acrighthere

Используй du -a тогда, фильтром убирая размер файлов. Свидетели юникса считают (не без оснований) этот вариант предпочтительным.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 2)
Ответ на: комментарий от iron

я уже объяснил чуть выше почему так делать нельзя. Конечно было бы удобнее, учитывая что у меня ещё 5 подобных заданий,и их тоже можно было бы через find решить, но потом накажут за это на сдаче лабораторной

acrighthere
() автор топика

Рекурсивно вывести содержимое файлов с номерами строк из директории lab0

Если выводить содержимое файлов с номерами строк, то как потом сортировать по [a-z] если начинаться они будут с номера? Тут явно какая-то хрень с заданием. Объясни, на каком этапе этой цепочки должны фигурировать номера строк.

iron ★★★★★
()
ifs = '
'

du -a $home/2024 |grep 'r$' |while (f = `{read}) {
	f = `{echo $f |sed 's/^[0-9]*	//'}
	if (! test -r $f)
		echo 'file not readable: '$f >/tmp/errors
	if not if (! test -f $f)
		true # not a file
	if not
		grep -n '^.*$' $f
}

Детали реализации адаптируешь под свои нужды =)

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от acrighthere

А ваш практик сам-то может ответить на пару углублённых вопросов по поводу парсинга выхлопа ls и того, что за такое делают в приличных местах? Чему молодёжь учит, капец.

anonymous
()
Ответ на: комментарий от acrighthere

но потом накажут за это на сдаче лабораторной

Всегда вымораживала незамутнённая логикой мстительность и преследование инакомыслящих, даже если это касается того, с какой стороны разбивать яйцо.
А потом так и работают:
- А может пилу наточить?
- Нам некогда! Работать надо!

anonymous
()
Ответ на: комментарий от anonymous

Не знаю не знаю, я через Ls уже сделал и фиг с ним, осталось только всё это сдать, потому что сдать скрипт это малое дело, а вот ответить потом на все вопросы, это уже другое

acrighthere
() автор топика
Ответ на: комментарий от acrighthere

а вот ответить потом на все вопросы

А скажи ему обосновать дебильность постановки задачи. Если не ответит – скажи пускай приходит со своими задачами тогда, когда они будут вменяемы. А еще можешь забрать у него ведомость, вписать его фамилию и поставить ему 2)))

iron ★★★★★
()
Ответ на: комментарий от PeleWin

«рекурсивно вывести» - что это вообще значит?

обработать (считать) рекурсивно, в процессе обработки вывести.

по завершению обработки тоже можно, но это хуже, так как потребляет неограниченное количество памяти.

Shushundr ★★★★
()
Ответ на: комментарий от iron

Я сегодня утром осознал что я часть недоделал, так я с неё вообще выпал: Удалить директорию quagsire4 Удалить директорию lab0/quagsire4/mightyena Буквально два задания идущих подряд при том что quagsire4 уже в lab0, других таких нет

acrighthere
() автор топика