【发布时间】:2015-01-25 21:52:28
【问题描述】:
我想知道如何在所有子目录中搜索特定模式的文件(GunZip 文件)(按月/按日期 - 创建的子目录)。 然后,对找到的文件执行脚本。还需要将 FILENAME 与输出一起填充,以便跟踪和进一步分析该特定文件。
Step1:例如:当前正在搜索此模式 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
第二步:
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,以下脚本在没有文件名的情况下也能正常工作。
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”写入另一个输出文件
然后将该输出文件调用到脚本中,我没有对位于服务器的源文件的写访问权限。
寻求您的建议!!!
【问题讨论】:
-
您已经问了很多 awk 问题,但您仍然在做绝对初学者的事情,例如将条件放入操作块中。 awk 脚本编写为
awk '<condition> { <action> }',而不是awk '{ if (<condition>) <action> }',我知道您以前的答案向您展示了如何将shell 变量的值传递给awk 脚本。如果你不从他们那里学到任何东西,我们提供答案是没有意义的。