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
答え1
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
文字のサフィックスを可能にします。1K = 1024, 1M = 1048576, ...
--field=<FIELDS>
- この入力フィールドの数値の変更/変換FIELDS
答え2
私は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/
次に、終了するフィールド4のすべてのパターンと一致します。G
$4/1 >= 18
で終わる場合は、分割し(Gを削除)、次G
の1
値以上であることを確認します。18
$4~/.*T/
あるいは、フィールド4の文字列がT
それで終わる場合に渡されます。
メモ: RomanPerekhrestのソリューションはより強力です。