unix - 搜索文件并对每个结果运行脚本 - 续 :

标签 unix awk find xargs

我想知道如何在所有子目录(按月/按日期 - 创建的子目录)中搜索特定模式的文件(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/

相关文章:

awk - SED 在删除后不处理 {} 中的多个命令)、追加)或更改)

java - 获取字符串中引号后的第一个单词“(Java)

git - 查找缺少 .git 目录的工作目录的 Git 修订版

unix - 列格式 unix

bash - 使用 awk 提取文件的修改内容

c - 如何知道fork()代码中的输出?

linux - 从文本文件中分割记录 block

c++ - 在 std::string 中,是否可以在不使用循环的情况下找到一组字符串中的第一个?

shell - 用于查找最近创建的目录的 unix 命令

ubuntu - chattr 命令未设置标志