LINUX.ORG.RU

Как правильно отфильтровать список с несколькими уровнями?

 , , ,


0

2

имеется:

$ prog.sh
/flevel/unit
/flevel/unit2
/flevel/unit3
/flevel/slevel/unit
/flevel/slevel/unit2
/flevel/slevel/tlevel/unit
/flevel/slevel/tlevel/unit2
/flevel/slevel/tlevel/unit3
/flevel/slevel/tlevel2/unit
/flevel/slevel/tlevel2/unit2
/flevel/slevel/tlevel/somelevel/unit

Нужно отфильтровать список что бы получить только уникальные пути

$ prog.sh | filter.sh
/flevel/
/flevel/slevel/
/flevel/slevel/tlevel/ 
/flevel/slevel/tlevel2/
/flevel/slevel/tlevel/somelevel/

Нет, не нужно.

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

у него ошибка

нет / на конце

и подозреваю автор хотел и промежуточные пути тоже выводить, хотя по условию непонятно надо ли

т.е. из

/dir1/dir2/dir3/file

сделать

/dir1/
/dir1/dir2/
/dir1/dir2/dir3/
firkax ★★ ()
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

Программа выводит список всех unit. В примере ясно видно что требуется. Промежучтоные требуются, это отдельный путь.

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

тольк если мочератор дебил. давно можно удалять пост без ответов на него

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

dirname со слешем на конце не умеет. Можно его заменить на скрипт типа такого:

dirname2.sh

#!/bin/bash
while [ -n "$1" ]; do
        printf "%s/\n" `dirname $1`
        shift
done

И запускать:
$ prog.sh | xargs -n1 dirname2.sh | sort -u

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

Всё выводит, но теперь пытаюсь в одну строку сделать.

prog.sh | xargs -n1 while [ -n "$1" ]; do printf "%s/\n" `dirname $1`; shift; done | sort -u
[code]-bash: syntax error near unexpected token `do'
vachicul ()
Последнее исправление: vachicul (всего исправлений: 1)
Ответ на: комментарий от vachicul

Так если слеш не нужен, то нафига? Мой скрипт ради него писался.

ashot ★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.