2012-05-01 7 views
4

私はこのbashスクリプトを使ってテキストファイルを作成しています。もっと効率的にするためには少しシンプルで短くしたいと思います。 ? displayColumn()ファイルを解析するためのBashスクリプトの圧縮

$vi 

function displayHelp 
{ 
     echo "Use '-f' to set the file to be used " 
     echo "Use '-s' to sort the data bya column" 
     echo "Use '-m' to output the rows which match this expression" 
} 

function displayColumn 
{ 
    columnnumber="$2" 
    awk '{print $'$columnnumber'}' $1 

} 

function displayParameter 
{ 
    parameter="$3" 
    columnnumber="$2" 
    awk -v s=$3 -v c=$2 '$c ~ s { print $0 }' $1 
} 

while getopts f:s:m:h opt 
do 
    case "$opt" in 
    h) displayHelp;; 
    f) filepath="$OPTARG";; 
    s) column="$OPTARG" 
    displayColumn $filepath $column 
    ;; 
    m) searchParam="$OPTARG" 
    displayParameter $filepath $column $searchParam 
    ;; 

    esac 
done 
+0

これはかなりよく見えます - なぜ短くなったのですか? – zigdon

+0

これは既にかなりシンプルに見えます。私はそれらの機能を別々に書くだろう。ちょっと、あなたは関数を完全に廃止して、単に 'case'ステートメントから物事を実行することができます。それは短くなるが、読むのは難しい。空白はパフォーマンスに影響しないことに注意してください。読むのが簡単なら、より保守的です。 – ghoti

+0

私はちょうどスクリプトがいかに効率的であるかに興味があります。 –

答えて

2

、あなたは-v変数受け渡しを使用していないが、displayParameter()に、あなたはあります。シェル変数を埋め込む代わりに、常に-vを使用してください。

また、displayParameter()では、2つの変数を割り当てて使用することはありません。

シェル変数が展開されている場合は、常に引用する必要があります。割り当てが割り当てられている場合は、割り当ての右側に引用符を付ける必要はありません。

-fが必要な場合は、強制する必要はありません。それを渡さずに(必要な引数)、スクリプトはstdin(あなたが意図しているかもしれない)からの読み込みを試みます。

-m-sが必要です。どちらも存在しない場合、AWKコマンドはエラーメッセージを出力します。

一般的に、必須の引数は位置パラメータとして扱われ、オプションフラグはオプション(およびそれらの引数)に使用されるべきです。

あなたの質問はおそらくCode Reviewに適しています。

関連する問題