Bash 计算每个子目录中来自同一报告文件的警告数
我在所有子目录中都有一个相同的文件名**(report.txt)**例如,我显示了来自2个子目录的文件(report.txt)的数据,如下所示:Bash 计算每个子目录中来自同一报告文件的警告数,bash,awk,Bash,Awk,我在所有子目录中都有一个相同的文件名**(report.txt)**例如,我显示了来自2个子目录的文件(report.txt)的数据,如下所示: report.txt in File1_D sub-directory: Stage Family Fatals Errors Warnings Infos ----- -------- -------- -------- -------- -------- CHE
report.txt in File1_D sub-directory:
Stage Family Fatals Errors Warnings Infos
----- -------- -------- -------- -------- --------
CHECK CODING 0 1 0 0
CHECK CONN 0 1 0 0
LIST CODING 0 12 0 0
LIST CONN 0 15 7 0
----- -------- -------- -------- -------- --------
Total 0 29 7 0
report.txt in File2_D sub-directory:
Stage Family Fatals Errors Warnings Infos Remaining
----- -------- -------- -------- -------- -------- ----------
CHECK CODING 0 0 1 0 0
LIST CLK 0 49 0 0 0
LIST CODING 0 3 0 0 0
LIST CONN 0 2 598 0 196
LIST SYN 0 0 100 0 126
----- -------- -------- -------- -------- -------- ----------
Total 0 54 699 0 322
其中一个子目录中的一个文件(report.txt)将具有六列,而在另一个子目录文件(report.txt)中,它将具有七列,我需要警告列的计数和如下输出:
File1_D:
Total number of warnings : 7
File2_D:
Total number of warnings : 699
这里File1_D和File2_D是子目录名称,我尝试了以下代码,但没有得到所需的输出:
#!/bin/bash
for d in *_D;
do
echo "$d:";
if [[ "$NF" -eq 7 ]];
then
awk '/Total/{print "Total number of warnings:" $(NF-2);exit}' "$d"/report.txt
else
awk '/Total/{print "Total number of warnings:" $(NF-1);exit}' "$d"/report.txt
fi
done
请您尝试下面的方法,在这里使用
find
+awk
组合(也请给出我提到的您的路径的绝对路径
)
其中script.awk
如下所示
cat script.awk
#!/usr/bin/awk
FNR==1{
print FILENAME":"
for(i=1;i<=NF;i++){
if(tolower($i)=="warnings"){ field=i }
}
}
/Total/{
print "Total number of warnings:" $(field-1)
}
cat script.awk
#!/usr/bin/awk
FNR==1{
print FILENAME":"
for(i=1;i<=NF;i++){
if(tolower($i)=="warnings"){ field=i }
}
}
/Total/{
print "Total number of warnings:" $(field-1)
}
/test/singh_test/report.txt:
Total number of warnings:7
/test/singh_test/test1/report.txt:
Total number of warnings:699