Bash 列出可以比较大小并给出状态的文件

Bash 列出可以比较大小并给出状态的文件,bash,perl,awk,sed,Bash,Perl,Awk,Sed,我有SQL存档,但其中一个的大小似乎比其他的小,是否有任何可能的方法来捕获所有大小并比较所有大小,如果其中一些小于某个百分比,例如:20%,则表示状态不好: -rw-rw-r-- 1 ort users 35846 Dec 10 23:00 0000001016.dwhext.gz -rw-rw-r-- 1 ort users 34869 Dec 11 23:00 0000000970.dwhext.gz -rw-rw-r-- 1 ort

我有SQL存档,但其中一个的大小似乎比其他的小,是否有任何可能的方法来捕获所有大小并比较所有大小,如果其中一些小于某个百分比,例如:20%,则表示状态不好:

-rw-rw-r--    1 ort  users         35846 Dec 10 23:00 0000001016.dwhext.gz
-rw-rw-r--    1 ort  users         34869 Dec 11 23:00 0000000970.dwhext.gz
-rw-rw-r--    1 ort  users         35134 Dec 12 23:00 0000001031.dwhext.gz
-rw-rw-r--    1 ort  users          9741 Dec 13 23:00 0000000265.dwhext.gz
-rw-rw-r--    1 ort  users         32221 Dec 14 23:00 0000000911.dwhext.gz
预期产出为:

-rw-rw-r--    1 ort  users         35846 Dec 10 23:00 0000001016.dwhext.gz G
-rw-rw-r--    1 ort  users         34869 Dec 11 23:00 0000000970.dwhext.gz G
-rw-rw-r--    1 ort  users         35134 Dec 12 23:00 0000001031.dwhext.gz G
-rw-rw-r--    1 ort  users          9741 Dec 13 23:00 0000000265.dwhext.gz B
-rw-rw-r--    1 ort  users         32221 Dec 14 23:00 0000000911.dwhext.gz G
快速脏代码(平均值是简单的求和/发生)

abs()不存在,因此此处使用
sqrt(x^2)

为了保持相同的顺序,可以进行2次传递

awk 'FNR==NR {div++;tot+=$5;next} FNR==1{m=tot/div} {if(sqrt(($5/m-1)^2) > 0.2) print $0 " B";else print $0 " G"}' sa* sa*

展示你的尝试……我的第一个想法是用awk来捕捉第五栏,但不确定是否有任何可能的方法在awk中计算它们。所以我坚持这个想法,我不确定elif是否是个好主意,只是我这边的一个很差的建议……这很琐碎,但没有实际意义-gzip压缩的东西,压缩比因内容而异。你最好通过实际解压数据来验证。我同意,但在这种情况下,通常情况下,时间不会有太大变化,因此,如果时间不同,最好有一些状态。无论如何,既然您已经标记了这个
perl
,请查看
stat
-s
函数。请给出问号
)上的语法错误。2?“B”
尝试完整的语法
)>0.2?“B”
:-d出于某种原因,awk在第一列上打印所有内容,但在尝试将其用作变量时,状态似乎不在第一列:
awkcmd=$(awk'FNR==NR{div++;tot+=5;next}FNR==1{m=tot/div}{if(sqrt(($5/m-1)^2)>0.2)打印$0“B”;否则打印$0“G}'tmp.data tmp.data)
$awkcmd | head-1
B w-rw-r-1 ort用户35846 Dec 10 23:00 0000001016.dwhext.gz
$awkcmd>tmp.1
-rw-rw-r-我发现了这个问题,他只是因为这个原因创建了^M字符来重新排列列。。。。
awk 'FNR==NR {div++;tot+=$5;next} FNR==1{m=tot/div} {if(sqrt(($5/m-1)^2) > 0.2) print $0 " B";else print $0 " G"}' sa* sa*