LINUX.ORG.RU

лаба на bash'е


0

0

Помогите с лабой по осям:

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

С прерываниями понятно: trap 'echo `ls -s | head -1`' INT + добавить условие на каждое пятое

ls -s | sort -n --- сортирует по блокам, а вот как отсечь 0-1-2-3-4-блочных и вывести имена оставшихся - не знаю...

ls -s | grep -v total | awk '{if($1>4) {print $1,$2}}' или нужно чисто на bash-e - без привлечения awk и тп ?

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

find самое правильное, но -maxdepth не во всяком find_e имеется.


$ ls -s1 | tail +2 | sort -n | awk '$1>4 {print $2}'

"tail +2" вместо "grep -v total", так как возможно имя файла со словом "total"

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

tail +2 --- это что-то странное.. в моей Генте не работает

awk '$1>4 {print $2}' --- не работает, если в имени пробелы

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

> find самое правильное

не, надо четко по заданию:

один конвейер - это есть межпроцессорный канал (пайп). Перед конвейером ls -s -- это первый процесс, а после конвейера сортировка (очч желательно одной командой) -- это второй процесс.

Сортировка по-ходу только через awk получается - так вот как выводить имена с пробелом?

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

Не то чтобы интересно, завидую просто.. :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.