在bash中编辑函数 - awk

时间:2012-08-21 19:27:06

标签: bash

我有这样的功能......

 function size {

      export FILENAME=$1

      export SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

      awk 'BEGIN{x = ENVIRON["SIZE"]
                 split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
                 for(i=8; y < 1; i--)
                     y = x / (2**(10*i))
                     print y " " type[i+2]
      }'

 }

size“/home/foo.bar”#1 MegaByte

如何插入:打印y“”键入[i + 2]

变量:SIZE_FILE?

测试:SIZE_FILE = $ {print y“”type [i + 2]} #error: - (

非常感谢

2 个答案:

答案 0 :(得分:2)

$(expr)构造会将评估“expr”的结果保存到变量中:

 theDate=$(date)

你也可以使用反引号,但我认为$()更具可读性:

   theDate=`date`

因此,对于您的脚本,您将使用:

    function size {

          export FILENAME=$1

          SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

          export FILE_SIZE=$(awk -v x=$SIZE 'BEGIN{
                     split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
                     for(i=8; y < 1; i--)
                         y = x / (2**(10*i))
                         print y " " type[i+2]
          }')

    echo $FILE_SIZE

 }

答案 1 :(得分:0)

您可以在没有awk的情况下执行此操作,这更适合处理文本文件。

function size () {

    # Non-environment variables should be lowercased
    # Always quote parameter expansions, in case they contain spaces
    local filename="$1"

    # Simpler way to get the file size in bytes
    local size=$(stat -c%s "$filename")

    # You could put all the units in an array, but we'll keep it simple.
    for unit in Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte; do
        echo "$size $unit"
        (( size /= 1024 ))
    done

}

sizes=$( size $myfile )