我想知道如何搜索所有子目录中的某些文件模式(月份/日期明确 - 创建子目录)。然后,在找到的文件上执行脚本。
步骤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
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 {} \;
cat MonthwiseData.sh
zcat *.gz | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >>Op_TT_Detail.txt
我该怎么做?
答案 0 :(得分:1)
我认为while
循环是处理这些情况的最佳方法:
while IFS= read -r file
do
awk '...' <(zcat "$file")
done < <(find . -type f -name "*gz")
您有find
命令发送到while
循环。这样,您就可以分开处理每个文件。
然后,这是执行基本awk '...' <(zcat "$file")
或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
。答案 1 :(得分:0)
您可以将find命令括在刻度线中以创建参数列表,例如:
awk '{print $0}' `find . -type f -name 'file*'` > concat_files.txt
一个简单的例子,就像连接以“file”开头的所有文件一样。这只是我想在这里强调的刻度线。