awk else 语句无法将列中的字节转换为 mb 和 gb 和 tb

awk else statement not working converting bytes in column to mb and gb and tb

尝试根据 if else 将列中的字节重新格式化为 mb 和 gb。

在我的数据中,最后一列是以字节为单位的大小。想要将字节转换为 mb 和 gb。如果小于 1gb(1073741824 字节)转换为 mb 并附加 MB,如果等于或大于 1gb 则转换为 gb 并附加 GB

awk -F ',' '{if ($NF >= "1073741824") {$NF=$NF/1024/1024/1024; gsub(/.*/, "&GB", $NF)} else { $NF=$NF/1024/1024; gsub(/.*/, "&MB", $NF)}}1'

但是 else 语句不起作用。如果字节大于或等于 1gb,则将其转换为 gb,否则转换为 mb。

一个普遍的问题是有条件的;当前代码在应该执行数字比较时执行字符串比较。

考虑:

# string comparison ( >= "300")

$ echo 100000 | awk '{if ( >= "300") print "greater than 300"}'
    - returns nothing

# numeric comparison ( >= 300)

$ echo 100000 | awk '{if ( >= 300) print "greater than 300"}'
greater than 300

将其滚动到 OP 的代码中(从 1073741824:

周围删除双引号
# old:
awk -F ',' '{if ($NF >= "1073741824") {$NF=$NF/1024/1024/1024; gsub(/.*/, "&GB", $NF)} else { $NF=$NF/1024/1024; gsub(/.*/, "&MB", $NF)}}1'
                        ^^^^^^^^^^^^

# new:
awk -F ',' '{if ($NF >=  1073741824 ) {$NF=$NF/1024/1024/1024; gsub(/.*/, "&GB", $NF)} else { $NF=$NF/1024/1024; gsub(/.*/, "&MB", $NF)}}1'
                         ^^^^^^^^^^

如果当前代码的这种编辑没有解决问题,那么请使用更新的代码、样本输入、代码生成的(错误的)输出和(正确的)预期输出来更新问题。