使用awk解析磁盘大小

时间:2015-05-22 09:42:49

标签: bash awk

我有两个文件,一个是磁盘及其大小,另一个是文件系统及其所需的大小信息。

盘信息:

sda 40G
sdb 100G
sdc 100g

FS-信息:

/a  50G
/b  40G

所以我要找的是基于总fs系统大小(40 + 50)= 90G我需要从磁盘信息列表中使用多少磁盘并打印它们的名称(在这种情况下我需要sda和sdb)。

我试过了:

awk '{sum+2} (NR%1==0) {if ( $sum -ge 90 ) {print $1} }' disk-info

但它打印出所有磁盘而不是仅打印sda和sdb。任何帮助将不胜感激,以修复此问题或使用新代码来实现目标。

2 个答案:

答案 0 :(得分:1)

据我了解,您希望计算两个文件中第二列的总和,并输出disk-info的最小行数,以便达到fs-info的总和。

要做到这一点,你可以使用这样的东西:

$ awk '{sub(/[gG]$/,"")}NR==FNR{fs+=$2;next}disk<fs{print $1}{disk+=$2}' fs-info disk-info
sda
sdb
  • sub删除&#34; G&#34; /&#34; g&#34;从每一行的末尾开始(当然,这假设您的所有尺寸均为GB)。
  • 对于第一个文件(fs-info),将获取第二个字段的总和。条件NR==FNR仅适用于第一个文件,其中总记录数等于当前文件的记录号。
  • 对于第二个文件(disk-info),如果disk仍然低于fs,则会打印第一个字段。

答案 1 :(得分:0)

这样的事情:

awk 'BEGIN {sum=90} {if ( sum > 0 ) {sum-=$2; print $1} }' disk-info

结果是:

sda
sdb

(另一个主题是如何计算&#34; 90&#34;,但这部分也被排除在你的原帖中,因此,我想你已经解决了它。)