首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用awk进行磁盘大小分析

用awk进行磁盘大小分析
EN

Stack Overflow用户
提问于 2015-05-22 09:42:49
回答 2查看 91关注 0票数 0

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

磁盘-信息:

代码语言:javascript
复制
sda 40G
sdb 100G
sdc 100g

Fs-info:

代码语言:javascript
复制
/a  50G
/b  40G

因此,我要寻找的是基于fs系统总大小(40 +50)=90G,我需要多少磁盘从磁盘信息列表使用和打印他们的名字(在本例中,我需要sda和sdb)。

我试过:

代码语言:javascript
复制
awk '{sum+2} (NR%1==0) {if ( $sum -ge 90 ) {print $1} }' disk-info

但是它正在打印出所有的磁盘,而不仅仅是sda和sdb。任何帮助,如果能解决这个问题,或者用新的代码来实现这个目标,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-22 10:09:48

据我理解,您希望从两个文件中计算第二列的和,并从disk-info输出最小行数,从而达到来自fs-info的和。

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

代码语言:javascript
复制
$ awk '{sub(/[gG]$/,"")}NR==FNR{fs+=$2;next}disk<fs{print $1}{disk+=$2}' fs-info disk-info
sda
sdb
  • sub从每一行的末尾删除"G"/"g“(当然,这假定您的所有大小都是GB的)。
  • 对于第一个文件(fs-info),取第二个字段的和。条件NR==FNR仅适用于第一个文件,其中总记录号等于当前文件的记录号。
  • 对于第二个文件(Disk),如果disk仍然低于fs,则打印第一个字段。
票数 1
EN

Stack Overflow用户

发布于 2015-05-22 11:27:36

就像这样:

代码语言:javascript
复制
awk 'BEGIN {sum=90} {if ( sum > 0 ) {sum-=$2; print $1} }' disk-info

结果是:

代码语言:javascript
复制
sda
sdb

(另一个不同的课题是如何计算"90",但这部分在你原来的帖子中也被排除在外,因此,我想你已经解决了)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30393395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档