我想知道如何搜索中的所有子目录的文件的某种模式(月/按日期明智的 - 创建子目录)。 然后,对找到的文件执行脚本。
第一步:例如:目前这种模式搜索文件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
01-NOV-2014 00:30:53,AAA,ECH,1,10,XXX
01-NOV-2014 00:39:36,BBB,ECH,1,10,XXX
01-NOV-2014 00:39:44,CCC,ECH,1,10,XXX
01-NOV-2014 00:25:20,DDD,ECH,1,10,XXX
曾尝试下面的命令组合这样的,但步骤是在完成:
find /cygdrive/c/Test/ -name TT_DETAIL*.gz | xargs | zcat | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >>Op_TT_DETAIL.txt
find /cygdrive/c/Test/ -name TT_DETAIL*.gz -exec ./MonthwiseData.sh {} \;
当猫MonthwiseData.sh
zcat *.gz | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >>Op_TT_Detail.txt
我怎样才能做到这一点?
我想while
循环是处理这些情况的最佳方式:
while IFS= read -r file
do
awk '...' <(zcat "$file")
done < <(find . -type f -name "*gz")
你有find
被发送到一个命令while
循环。 这样一来,就可以separatedly处理每个文件。
然后,它是执行基本的问题awk '...' <(zcat "$file")
或zcat "$file" | awk '...'
zcat "$file" | awk '...'
。
你的情况:
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)
测试
我们有一些gz
在当前目录下的文件:
$ for f in *gz; do echo "-- $f --"; zcat "$f"; done-- a.gz --
hello
bye
-- b.gz --
thisisB
bye
让我们find
他们,并在第一行打印仅仅是第一场:
$ while IFS= read -r file; do awk 'NR==1{print $1}' <(zcat "$file") >> output; done < <(find . -type f -name "*gz")
而输出是:
$ cat output
thisisB
hello
我认为你正在寻找的东西是这样的:
find /cygdrive/c/Test/ -name "TT_DETAIL*.gz" -print0 | \
xargs -0 -I file zcat file | \
awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >>Op_TT_Detail.txt
-
find
找到的文件和-print0
打印其名称。 -
xargs -0
让你处理什么是从以前的管道来了。 随着-I file
,我们将其命名为file
,这样我们就可以再做zcat file | awk
zcat file | awk
。
有趣的阅读: xargs的:如何控制和使用的命令行参数 。
您可以在刻度线围住find命令创建一个参数列表,如:
awk '{print $0}' `find . -type f -name 'file*'` > concat_files.txt
一个简单的例子做同样的串联开始的“文件”真正的所有文件。 这只是刻度线我想在这里强调。