同じ出力でMBとGBを組み合わせた何かを並べ替えようとしていて、制御できなかったため、ここで終わりました。
$NF
#GB
or #MB
パターンは出力の最後の列であったため使用されます:
somecommand | \
gawk '{
if ($NF ~ /[0-9\.]+GB/)
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
printf "%sMB\n", a*1024} \
else {print $NF}
}' | \
sort -n
awkコマンドの説明:
if ($NF ~ /[0-9\.]+GB/)
最後の列が、数字または.
1回以上の後に続くGB
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
次に、変数a
を同じ最後の列の同じ正規表現パターンに一致する各行の数字部分に設定します($NF
)
printf "%sMB\n", a*1024} \
設定後a
、を使用printf
して出力をフォーマットします${a*1024}MB
else {print $NF}
それ以外の場合は、最後の列のみを印刷します
sort -n
出力で数値ソートを使用する
例
echo "4MB\n5GB\n420MB\n420GB\n1024MB\n1GB" | \ 23:43:06 (EMP-2653/package-upgrades) Ø M
gawk '{
if ($NF ~ /[0-9\.]+GB/)
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
printf "%sMB\n", a*1024} \
else {print $NF}
}' | \
sort -n
私は正規表現パターンを再利用する方法があると確信しているので、一度だけマッチを実行し、その場で置き換えますが、それを行う方法はまだわかりません:)
brew install coreutils
(すべてのcoreutilsコマンドの先頭に「g」を付けます)。その後、できますgdu -hs * | gsort -h
。