我想知道如何在所有子目录中搜索某些模式的文件(GunZip文件)(月份/日期明智 - 创建子目录)。 然后,在找到的文件上执行脚本。还需要填充FILENAME以及输出以进行跟踪以及对特定文件的进一步分析。
步骤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
cat 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文件,我应该写&#34; find /cygdrive/c/Test/ -name TT_DETAIL*.gz
&#34;到另一个输出文件
然后将该输出文件调用为脚本,我没有对位于服务器的源文件进行写访问。
寻找你的建议!!!
答案 0 :(得分: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
命令中使用它。