2017-11-16 3 views
0

を分析し、説明:Awkのコマンド私はawkスクリプトに関するいくつかのチュートリアルを読んでみましたが、それでも以下のスクリプトと疑問を持っている

のようにiniファイルをconfigコン
get_value_from_ini() 
{ 
    section=$1 
    key_name=$2 
    echo `awk -F '=' '/\['"$section"'\]/{a=1}a==1&&$1~/'"$key_name"'/{gsub(/[[:blank:]]*/,"",$2); print $2}' $cfg_file` 
} 

db_user=`get_value_from_ini DB DBUSER` 
db_passwd=`get_value_from_ini DB DBPASSWD` 

そして入力:私はunserstandとして

.... 
[DB] 
DBUSER=dbuser 
DBPASSWD=dbpasswd 
... 

、awkコマンドでは、パターンは "[DB]"で、フィールドセパレータは "="ですが、正しく動作し、正しい結果を返すことができます。なぜですか?私がそれを理解するのを助けてくれますか?

ありがとうございます!下手に書かれたコードが、

答えて

0

あなたは、単に左から右に読んで:ここで

-F '=' -- As you have said, set FS to = 

'/\'"$section"'\]/{a=1} -- If the line contains the information stored in variable section then set a=1 

a==1 && $1~/'"$key_name"'/ -- If 'a' set and first field contains the information stored in variable key_name, execute all between {} 

{gsub(/[[:blank:]]*/,"",$2); print $2}' -- If previous step returns true, remove all whitespace from second field and then print it out 

$cfg_file -- file to be read 

は、おそらくエラーが発生しやすいの読み取りとなること、それは非常に混乱するすべての余分な引用符を取り除くための代替です:

get_value_from_ini() 
{ 
    awk -F '=' -vsection="$1" -vkey_name="$2" '$0 ~ "["section"]"{a=1}a==1 && $1 ~ key_name{gsub(/[[:blank:]]*/,"",$2); print $2}' $cfg_file` 
} 
+0

おかげであなたは私を理解して助けをたくさん: '/ \ [' "$セクション" '\]/{A = 1} == 1 これは私がここで、だから、 を理解していなかった主なポイントです'/\ ['"$ section"' \]/{a = 1}は '$ 0〜' ["section"] "{a = 1}の省略形ですあなたはこれのような説明略語を含んでいますか? もう1つのこと: '$ 0〜' ["section"] "{a = 1} a == 1 私はここに3つのコマンドがあると理解しています。我々は別の文字なしでこのように書くことができますか? (私は ';'を意味する) –

+0

中括弧は;のような区切り文字として使うこともできます。主なドキュメントは、私が通常使っているものです: - http://www.gnu.org/software/gawk/manual/html_node/index.html – grail

関連する問題