我想知道如何在所有子目录(按月/按日期 - 创建的子目录)中搜索特定模式的文件(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
第二步:
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
”写入另一个输出文件
然后将该输出文件调用到脚本中,我没有位于服务器的源文件的写入权限。
寻找您的建议!!!
最佳答案
很高兴看到您正在使用代码片段 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
命令中使用它。
关于unix - 搜索文件并对每个结果运行脚本 - 续 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27168302/