2014-11-27 2 views
2

Я хотел бы знать, как искать определенный шаблон файлов (GunZip Files) во всех подкаталогах (месяц мудрый/Дата мудрый - созданные подкаталоги). И затем выполните сценарий по найденным файлам. Также необходимо заполнить FILENAME вместе с выходом для отслеживания и дальнейшего анализа этих файлов.Поиск файлов и запуск сценария для каждого результата - Cont:

Шаг1: Например: в настоящее время поиск файлов по этому шаблону TT_DETAIL * .gz.

find /cygdrive/c/Test/ -name TT_DETAIL*.gz 

выход # 1:

/cygdrive/c/Test/Feb2014/TT_DETAIL_20141115.csv.gz 
/cygdrive/c/Test/Jan2014/TT_DETAIL_20141110.csv.gz 
/cygdrive/c//Test/Mar2014/TT_DETAIL_20141120.csv.gz 

Шаг2:

zcat TT_DETAIL*.gz | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >Op_TT_Detail.txt 

кошка Op_TT_Detail.txt

ZZZ,AAA,ECH,1,10,XXX 
ZZZ,BBB,ECH,1,10,XXX 
ZZZ,CCC,ECH,1,10,XXX 
ZZZ,DDD,ECH,1,10,XXX 

fedorqui Спасибо за ниже скрипт работает нормально без FILENAME.

while IFS= read -r file 
do 
    awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' <(zcat "$file") >>Op_TT_Detail.txt 
done < <(find /cygdrive/c/Test/ -name TT_DETAIL*.gz) 

Пытались ниже команды, чтобы заполнить FILENAME вместе с выходом для отслеживания цели:

while IFS= read -r file 
do 
    awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17,FILENAME}' <(zcat "$file") >>Op_TT_Detail.txt 
done < <(find /cygdrive/c/Test/ -name TT_DETAIL*.gz) 

Желаемая Выход:

ZZZ,AAA,ECH,1,10,XXX,/cygdrive/c/Test/Feb2014/TT_DETAIL_20141115.csv.gz 
ZZZ,BBB,ECH,1,10,XXX,/cygdrive/c/Test/Feb2014/TT_DETAIL_20141115.csv.gz 
ZZZ,CCC,ECH,1,10,XXX,/cygdrive/c//Test/Mar2014/TT_DETAIL_20141120.csv.gz 
ZZZ,DDD,ECH,1,10,XXX,/cygdrive/c//Test/Mar2014/TT_DETAIL_20141120.csv.gz 

Поскольку FILENAME не работает * .gz файлов, должны Я пишу «find /cygdrive/c/Test/ -name TT_DETAIL*.gz» в другой выходной файл , затем вызывается этот выходной файл в скрипт, у меня нет доступа на запись для исходных файлов, расположенных ser веры.

Ищет ваши предложения !!!

+0

Вы задали много вопросов об awk, и все же вы все время выполняете абсолютные новички, такие как помещение условия в блок действий. Сценарии Awk записываются как 'awk ' {}'', а не 'awk '{if () }', и я ЗНАЮ, что у вас были предыдущие ответы, показывающие вам, как передать значение переменных оболочки в awk-скрипты , Нам бессмысленно давать ответы, если вы ничего не узнаете от них. –

ответ

2

Приятно видеть, что вы используете фрагмент I wrote в предыдущем вопросе!

Я хотел бы использовать это:

while IFS= read -r file 
do 
    awk -v file="$file" 'BEGIN { FS=OFS=","} \ 
         { if ($11=="10") print $2,$3,$6,$10,$11,$17, file}' \ 
     <(zcat "$file") >>Op_TT_Detail.txt 
done < <(find /cygdrive/c/Test/ -name TT_DETAIL*.gz) 

То есть, с -v file="$file" вы даете имя файла в качестве переменной в awk. И затем вы используете его в своей команде print.

+1

Большое спасибо Fedorqui, Отлично, он отлично работает, как и ожидалось !!! – VNA

+1

Fedorqui, Просто для любопытства, «1», отображаемый на моих комментариях, равен «Вам это нравится», или что-то еще !!! – VNA

+0

Ха-ха да, это как сказать: «Да, я счастлив, что это сработало с тобой! Я не знаю, что еще сказать, кроме этого, поэтому я скажу +1, чтобы сделать его короче :))« – fedorqui