задача преформы gunzip и разархивировать - PullRequest
1 голос
/ 18 марта 2009

Я хочу выполнить это

awk -F, '$1 ~ /F$/' file.dat

по всему каталогу gziped файлов

Я хочу иметь возможность циклически проходить через каждый файл, распаковать его, выполнить указанную выше команду (распечатать все результаты), распаковать и перейти к следующему архивированному файлу

как это можно сделать?

Спасибо

Ответы [ 3 ]

3 голосов
/ 18 марта 2009

Ну, если вам нужно все это в одну строку:

find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/'

То, что должно работать на вас

2 голосов
/ 18 марта 2009

Мне кажется, что вы хотите вывести строки, где первое поле в списке полей, разделенных запятыми, оканчивается на 'F'

Если вас не волнует список того, из какого файла .gz взяты строки или какой файл в файле gzipped - то есть вы просто хотите, чтобы в списке были строки - вам даже не нужно распаковывать файлы. Сначала файлы gz, так что вам не нужно их повторно архивировать.

zcat file.gz | awk -F, '$1 ~ /F$/'

Для каждого файла в текущем дереве каталогов используйте поиск с xargs. Этот пример ограничивает его только текущим каталогом, но просто пропустите "-maxdepth 1", чтобы получить все дерево каталогов

find . -maxdepth 1 -name \*.gz -print0 | xargs -0 zcat | awk -F, '$1 ~ /F$/'

Это говорит о том, что нужно найти файлы, заканчивающиеся на «.gz» и записать их имена с ограничителем NUL (0 в -print0), канал, который выводится через xargs, который будет выбирать список на основе NUL chacracters (аргумент "-0") и запустите zcat для файлов. Передайте , который выведет через вашу команду awk, и вы получите соответствующие строки.

0 голосов
/ 18 марта 2009

как насчет сценария оболочки, который делает:

gunzip $1.gz
awk -F, '$1 ~ /F$/' $1
gzip $1

Просто убедитесь, что $1 не имеет расширения .gz.

тогда вы можете сделать что-то вроде:

find -name \*.gz -type f|xargs my_shell_script
...