Терминал, файл и awk - PullRequest
       4

Терминал, файл и awk

0 голосов
/ 12 декабря 2018

Я пытаюсь напечатать имена, типы и размеры всех файлов и подкаталогов, используя du, file и awk в bash.мой код до сих пор:

du -bsh * | awk '{print $2, $1}' ; file * | awk '{print $2}' 

Они запускаются отдельно, поэтому они печатаются отдельно.Как сделать это одной командой?

Ожидаемый результат:

File1                        ASCII text                10K
Mov.mp4                ISO Media                15M
Pictures                directory                4,0K
bder.c            C source                 4,6K

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Возможно, вас заинтересует решение вроде этого:

paste <(stat -c "%n %s" *) <(file -b *)

или если вам нравится, что ваш вывод немного чище:

paste -d'|' <(stat -c "%n|%s" *) <(file -b *) | column -s"|" -t

, который дает вам следующий вывод:

File1      10240       ASCII text
Mov.mp4    15728640    ISO Media
Pictures   4096        directory
bder.c     4710        C source
0 голосов
/ 12 декабря 2018

Попробуйте:

awk 'NR==FNR{infos[$1]=$2}NR!=FNR{print $2, infos[$2 ":"], $1}' OFS="\t" <(file *) <(du -bsh *)

Awk сначала читает вывод file *.Он запускает NR==FNR{infos[$1]=$2} и хранит информацию внутри ассоциативного массива infos.

Затем awk читает вывод du -bsh * и выполняет этот блок NR!=FNR{print $2, infos[$2 ":"], $1}'.

Прочитайте это , чтобы узнать больше о замене процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...