$ awk 'BEGIN {FS=":"} {comments[$1][NR]=$3} END {for (bug in comments) { print bug; for (comment in comments[bug]) { print " ",comments[bug][comment] } } } ' /path/to/input
Bug123
SomeComment
SecondComment
Bug222
SomeOtherComment
Это работает путем создания многомерного -массива при чтении входного файла и последующего обхода результирующих данных в порядке появления «ошибок». С некоторыми небольшими изменениями это можно изменить для сортировки массива внешнего уровня -.
Далее предполагается, что вы работаете с архивом в текущем каталоге.
tar -x -f "$archivedir.tar"
mv "$archivedir" new-name
Предполагается, что переменная $archivedir
содержит имя архива tar
без суффикса .tar
и что это также имя каталога, который будет создан при распаковке архива.
Распаковывает архив и переименовывает созданный каталог.
Если у вас есть имя файла архива tar
в $tararchive
и если суффикс имени файла.tar
(включен в значение$tararchive
):
tar -x -f "$tararchive"
mv "$(basename "$tararchive".tar)" new-name
Бит "$(basename "$tararchive".tar)"
можно заменить на "${tararchive%.tar}"
.
Я не уверен, что правильно понял ваш вопрос, но мне кажется вы ищете что-то вроде этого:
$ dir="$(tar tf archive.tar | cut -d / -f1 | uniq)"
$ echo "$dir"
tar-very-long-nime-very-very-long