仅当第三个字段中的数字大于 X 时才打印行

仅当第三个字段中的数字大于 X 时才打印行

以下lsblk命令以字节为单位打印磁盘使用情况

 lsblk -bio KNAME,TYPE,SIZE,MODEL| grep disk 

 sda   disk  298999349248 AVAGO
 sdb   disk 1998998994944 AVAGO
 sdc   disk 1998998994944 AVAGO
 sdd   disk 1998998994944 AVAGO
 sde   disk   98998994944 AVAGO

当磁盘大于 300000000000 时,如何通过在管道awkperl单行符后添加或其他方式打印磁盘

预期输出:

 lsblk -bio KNAME,TYPE,SIZE,MODEL| grep disk | ......
 sdb   disk 1998998994944 AVAGO
 sdc   disk 1998998994944 AVAGO
 sdd   disk 1998998994944 AVAGO

答案1

您可以使用它awk本身来进行模式匹配,而不是使用grep.

lsblk -bio KNAME,TYPE,SIZE,MODEL| awk '/disk/ && $3> 300000000000 || NR==1'

或者说有科学价值3e11

答案2

短的awk方法:

lsblk -nbio KNAME,TYPE,SIZE,MODEL | awk '$3>3e11'

  • -n( --noheadings) - 不打印标题

  • $3- 第三个字段(SIZE列)

  • 3e11--符号。字母E(或e)通常用来表示“次计算为“”的幂(可写为"× 10n“),后跟指数值;换句话说,对于任意两个实数mn,使用“ mEn”将表示 的值m × 10n3e11相当于300000000000.

答案3

Perl解决方案:

lsblk -bio KNAME,TYPE,SIZE,MODEL | perl -ane 'print if $F[2] > 3e11'

您也可以使用 300_000_000_000 作为值。

  • -n 逐行读取输入而不打印
  • -a将空格上的输入拆分到 @F 数组中

相关内容