MB와 GB를 동일한 출력으로 결합 한 다른 것을 정렬하려고 시도했기 때문에 여기에서 끝내서 제어 할 수 없었습니다.
$NF
#GB
또는 #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/)
마지막 열이 숫자 나 한 .
번 이상 포함 된 정규식 패턴과 일치하는 경우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
.