我有两个文件,一个是磁盘及其大小,另一个是文件系统及其所需的大小信息。
盘信息:
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。任何帮助将不胜感激,以修复此问题或使用新代码来实现目标。
答案 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)。NR==FNR
仅适用于第一个文件,其中总记录数等于当前文件的记录号。disk
仍然低于fs
,则会打印第一个字段。 答案 1 :(得分:0)
这样的事情:
awk 'BEGIN {sum=90} {if ( sum > 0 ) {sum-=$2; print $1} }' disk-info
结果是:
sda
sdb
(另一个主题是如何计算&#34; 90&#34;,但这部分也被排除在你的原帖中,因此,我想你已经解决了它。)