2017-04-13 14 views
1

awkで簡単なスクリプトを作成しようとしていますが、私は奇妙な結果を得ています。マニュアルまたはWebのいずれかの手がかりを見つけることができません:gawkの文字列連結で予期しない結果が発生する

ここでは、入力ファイルの:

# Keyspace 
db0:keys=14,expires=4,avg_ttl=454226332 

はここでコマンド

gawk -F : '/^db/ { split($2, keys, ","); for(i in keys) { k = gensub("=", ":", "g", keys[i]); print ("redis." $1 "." k "Z")} }' 

はここでの結果だだ:

redis.db0.keys:14Z 
redis.db0.expires:4Z 
Zedis.db0.avg_ttl:454226332 

なぜdoesnの」最後の行には最後に "Z"がありますか? gawkやawk(Mac)を使用しても問題ありません。

期待される結果は次のようになります。

redis.db0.keys:14Z 
redis.db0.expires:4Z 
redis.db0.avg_ttl:454226332Z 
+0

あなたの期待どおりの結果は?あなたは長いコマンドを貼り付けて、それが何であるかを何のヒントも与えずに何かを作り出すのかを尋ねることに注意してください。関連する詳細を含めるように質問を編集してください。 – fedorqui

+0

また、 'split()'を2回使用しているので、別のFSを設定してそれらのうちの1つを削除することを検討してください。 – fedorqui

+1

私の 'GNU Awk 4.1.3'は正常に結果を返します。多分あなたは悪い結末を持っていますか? 'cat -vet file'を実行して、何かがファイル内で壊れているかどうかを確認します。 – fedorqui

答えて

1

あなたの入力ファイルには、それらを削除することとdos2unixまたは類似を見ることがcat -vを使用し、各行末の制御-Mを持っています。

これは、私たちが疑問を抱く最も一般的な問題です。.... "cat -v fileを実行し、投稿する前に^Mを探してください"と願っています。

+0

ええ、そういう場合には一貫性が期待されます。なぜ、すべての行が同じに見えるのですか? :/ – Pawel

+0

出力行と入力行を混同しないでください。あなたの入力は実際には 'db0:keys = 14、expires = 4、avg_ttl = 454226332 'のようにあなたのINPUT行で終わります。-control-Mは1つしかなく、 'avg_ttl = 454226332 '他の2つのフィールドの最後ではなく、3番目の入力フィールドにのみ表示されるため、3番目の出力ラインにのみ表示されます。 –

+1

あなたは絶対に正しいです:facepalm: – Pawel

関連する問題