Количество строк каждого файла в папке `.zip`

У меня есть одна папка zip с 5 текстовыми файлами внутри. Я должен проверить количество строк каждого файла, не разархивируя папку zip.

Я старался zcat file.zip | wc -l но это дает счет только первого файла.

Можете ли вы, ребята, помочь мне получить результат, как указано ниже:

File_Name Rowcount
file1 100
file2 100
file3 100
file4 100
file5 100

1 ответ

Если ваш файл в архиве tar архив, тогда вы можете просто зациклить каждое имя файла в архиве, чтобы получить количество строк в каждом. Например, если ваш архив содержит:

$ tar -tzf /tmp/tmp-david/zipfile.tar.gz
yon.c
yourmachinecode.s
zeroonect.c
zeros
zz

Вы можете перебрать имена файлов с помощью:

$ for i in $(tar -tzf /tmp/tmp-david/zipfile.tar.gz); do 
printf "%8d lines - %s\n" $(wc -l <"$i") "$i"
done
      61 lines - yon.c
       5 lines - yourmachinecode.s
      63 lines - zeroonect.c
       0 lines - zeros
       1 lines - zz

Вы можете сохранить сумму и приращение с каждым счетом по мере необходимости, чтобы получить сумму.

Если ваш файл является архивом.zip (MS-DOS), то вы можете сделать то же самое, но разбор отдельных имен файлов из вывода unzip -l занимает немного больше работы, например

$ unzip -l /tmp/tmp-david/zipfile.zip | grep -v '^-' | \
tail -n+3 | head -n-1 | awk '{print $4}'

(вы должны использовать вышеизложенное, как в подстановке команд, чтобы управлять for петля)

Другие вопросы по тегам