18G以上のすべてのディスクを印刷したい
=> 18Gのディスクのみを印刷するために次の構文を適合させる方法
lsblk -l | awk '/disk/'
fd0 2:0 1 4K 0 disk
sda 8:0 0 150G 0 disk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
sdg 8:96 0 20G 0 disk
sdh 8:112 0 20G 0 disk
sdi 8:128 0 20G 0 disk
sdj 8:144 0 2G 0 disk
sdk 8:160 0 2G 0 disk
lsblk
+ awk
+ numfmt
解決策:
lsblk -lnb | awk '$4>=19327352832' | numfmt --to=iec --field=4
lsblk
オプション:
-n
-ヘッダー行を印刷しない-b
-人間が読める形式ではなく、バイト単位でSIZE列を出力しますawk
詳細:
$4
-4番目のフィールド値(SIZE
列)19327352832
- に相当 18G
バイト単位numfmt
オプション:
--to=iec
-出力数をUNITs
に自動スケーリングします。オプションの1文字のサフィックスを受け入れる:1K = 1024, 1M = 1048576, ...
--field=<FIELDS>
-これらの入力フィールドの数値を置換/変換しますFIELDS
私のlsblk
は機能しませんが、これは機能しますか?
lsblk -l | awk '{
if ($4~/.*G/ && $4/1 >= 18) ||
($4~/.*T/)
print $0;
}'
#As a single line:
lsblk -l | awk '{if ($4~/.*G/ && $4/1 >= 18) || ($4~/.*T/){print $0}}'
awk
プログラム
$4~/.*G/
はG
で終わるフィールド4の任意のパターンに一致します$4/1 >= 18
がG
で終わる場合は、それを1
で割り(Gを削除するため)、18
以上かどうかを確認します。$4~/.*T/
、またはフィールド4の文字列がT
で終わる場合は通過します。注: RomanPerekhrestのソリューションはより堅牢です。