【问题标题】:print specific field based on condition根据条件打印特定字段
【发布时间】:2015-02-17 13:30:58
【问题描述】:

谁能告诉我如何打印 60% 及以上的 FS 名称?

dev/mapper/vg00-LogVol01
                       4062912   1620112   2233088  43% /
/dev/mapper/vg00-LogVol02
                       2031440     87412   1839172   5% /u11
/dev/mapper/vg00-LogVol04
                       8125880   5297076   2409376  69% /opt
/dev/mapper/vg00-LogVol03
                       8125880   3314648   4391804  44% /usr
/dev/mapper/vg00-LogVol13
                       4062912    740804   3112396  20% /usr/op
/dev/mapper/vg00-LogVol11
                       4062912   2515896   1337304  66% /u01
/dev/mapper/vg00-LogVol02
                       8125880   5409672   2296780  71% /var
/dev/mapper/vg00-LogVol09
                       2031440    148780   1777804   8% /var/opt
/dev/mapper/vg00-LogVol01
                       5078656   3391592   1424960  71% /tmp

例如:打印 /tmp 显示 71% 大于 60%

【问题讨论】:

  • 你想要的输出是什么?你自己尝试过什么吗?如果有,您是否遇到过任何具体问题?
  • /u01/var 呢?

标签: shell if-statement awk grep


【解决方案1】:

尝试使用:

awk '/%/ && int($4)>=60 {print $4, $5}' filename

【讨论】:

  • 我得到的输出低于 43% / 5% /u11 69% /opt 44% /usr 20% /usr/op 66% /u01 71% /var 8% /var/opt 71% /tmp 只需要打印 60% 以上的 FS
  • 我的错:$0 应该是 $4 更改了上面的 awk 代码 - 很抱歉造成混乱。
【解决方案2】:

您最好使用df -P 强制df 将每条记录输出到一行。一旦你这样做awk 很容易:

df -P | awk 'int($(NF-1)) >= 60 {print $1, $(NF-1)}'

【讨论】:

  • 出现错误:awk: (FILENAME=- FNR=34) 致命:尝试访问字段 -1
  • 试试:df -P | awk 'NF>2 && int($(NF-1)) >= 60 {print $1, $(NF-1)}'
【解决方案3】:
awk '$4+0>=60{print l, $4}{l=$0}' input

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2021-05-07
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多