web-dev-qa-db-ja.com

3番目のフィールドの数値が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

パイプの後にawkまたはPerlワンライナーを追加することにより、ディスクが300000000000より大きい場合にディスクを印刷する方法

予想される出力:

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

awkを使用する代わりに、grep自体を使用してパターンマッチングを行うことができます。

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

または科学的な値を使用する3e11

5
αғsнιη

Perlソリューション:

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

値として300_000_000_000を使用することもできます。

  • -nは、印刷せずに1行ずつ入力を読み取ります
  • -aは空白の入力を@F配列に分割します
1
choroba

短いAwkアプローチ:

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

  • -n--noheadings)-見出しを印刷しない

  • $3-3番目のフィールド(SIZE列)

  • 3e11-[〜#〜] e [〜#〜]-表記。文字E(またはe)は、「倍数tenの累乗」(これは"× 10n ")として記述され、その後に指数の値が続きます。つまり、任意の2つの実数mおよびnの場合、" mEn "はm × 10nの値を示します。3e11300000000000と同等です。

1
RomanPerekhrest