0

こんな機能があるなんて…

 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 メガバイト

どのように挿入できますか: print y " " type[i+2]

変数へ: SIZE_FILE ?

test: SIZE_FILE=${print y " " type[i+2]} # エラー :-(

どうもありがとうございました

4

2 に答える 2

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

 }
于 2012-08-21T19:36:23.243 に答える
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 )
于 2012-08-21T20:08:45.700 に答える