2017-02-20 15 views
-1

のグループのソート-n使用し、私はこのサイト上のsortコマンドのヘルプをたくさん見つけたが、私はトラブルの変数とそれを使用する方法を考え出すを抱えています。基本的には、2つ(またはそれ以上)の変数があり、結果を昇順でエコーしたいと考えています。Unixのbashスクリプト:変数

!#usr/bin/bash 
# Look for PNG files 
pngTotal=0 
for i in /home/* 
do 
j=`grep -q PNG $i` 
if [ $? == 0 ]; then 
#echo "add 1 to png" 
((pngTotal++)) 
fi 
done 
echo "PNG: $pngTotal" 

# Look for GIF files 
gifTotal=0 
for i in /home/* 
do 
j=`grep -q GIF $i` 
if [ $? == 0 ]; then 
#echo "add 1 to gif" 
((gifTotal++)) 
fi 
done 
echo "GIF: $gifTotal" 

私のpngTotal、gifTotalなどの変数を昇順に並べ替えたいと思います。私はsort -n $pngTotal $gifTotalの行に沿って異なる構文を試してみましたが、成功しませんでした。

+2

あなたシェバングが実際bangshe – Leon

+0

サンプル入力され、サンプル出力が必要。 –

+0

ummmm ...あなたはあなたのスクリプトで何をしようとしていますか?私はあなたが正しい拡張子を持っているか、あなたがそうあなたは、ファイルがPNGであるかどうかを確認したいことを信頼していないことではない可能性のあるファイルを持っているように思われることを理解していますが、中にPNG文字でテキストファイルをgrepすることができそれは明らかにそれはpngファイルではありません。ファイルコマンド、特に-bと--mime-typeオプションを見てください。 grepを使用している場合、実際にはifコマンドに直接渡すことができます。 – grail

答えて

1

それは少しハックですが、あなたは一時ファイルに結果を書き込むこと気にしない場合は、次の操作を行うことができます。

#!/usr/bin/env bash 
# Look for PNG files 
pngTotal=0 
for i in /home/* 
do 
j=`grep -q PNG $i` 
if [ $? == 0 ]; then 
#echo "add 1 to png" 
((pngTotal++)) 
fi 
done 
echo "PNG: $pngTotal" >> /tmp/total.log 

# Look for GIF files 
gifTotal=0 
for i in /home/* 
do 
j=`grep -q GIF $i` 
if [ $? == 0 ]; then 
#echo "add 1 to gif" 
((gifTotal++)) 
fi 
done 
echo "GIF: $gifTotal" >> /tmp/total.log 

sort -k2 -n /tmp/total.log 
rm /tmp/total.log 

あなたは基本的にファイルに出力結果を、それを並べ替えます2番目の列に基づいて(デフォルトの区切り記号はスペースです)、数値に基づいて昇順にソートされます。

+0

これは完璧な解決策です。ありがとうございました! – CabbageCoder

0
  • あなたが解決しようとしているように見える実際の問題は、あなたのhome、GIFやPNG画像だけではないにすべての画像ファイルをカウントしますこれは、ワンライナーで解決することができます。

    find /home/ -type f -print0 \ 
        | xargs -0L10 file -b --mime-type \ 
        | fgrep image/ \ 
        | cut -d/ -f2 \ 
        | sort | uniq -c | sort -k1,1n 
    

    それは動作しますこのように:すべてのファイル名(find)を収集し、xargsfileに渡して、それらのMIMEタイプを見つけて、fgrepで非画像を除外し、文字列"image/"cutで取り除き、各タイプの数を数えます最後に数値をソートします。コードの一部の出力をソートする

  • 一般的な問題は、サブシェルで解決することができる。

    #!/bin/bash 
    ( 
        # Any command you like... 
        echo "PNG: 3829" 
        # Other commands 
        echo "GIF: 233" 
    ) | sort -k2,2n 
    
関連する問題