2016-12-09 5 views
1

のwhileループでhyphenhash signを一致させようとしています。現在の設定は次のとおりです。awkのハイフン( - )とハッシュ(#)記号をどのように一致させることができますか?

awk 'BEGIN { while ($1==# && $2==-) { #do stuff} }' 

これは、明らかにハッシュ記号に構文エラーが発生します。私はあらゆる方法でそれをエスケープしようとしましたが、これはシンタックスエラー、または "バックスラッシュが行末にない"というエラーを引き起こします。

So:awkの式でhash signhyphenをどのように一致させることができますか?

+0

二重引用符で試してみましたか? –

答えて

2

#do stuffnextまたは入力の次の行を取得するためにいくつかの他のステートメントが含まれていない限り、BEGINwhileは、あなたが望むものはおそらくではありません。あなたの特定の質問に答えるために、入力の各行を確認したいと思っています。私はを使用して2行の入力を提供しています:foo bar skip# - printmeです。私は#do stuffの代わりにprint $3を使用しています。

echo -e 'foo bar skip\n# - printme' | awk '($1=="#" && $2=="-") { print $3 }' 
               #^^  ^^ double quotes 

プリントprintmeが必要です。

echo -e 'foo bar skip\n# - printme' | awk '($1~/^#$/ && $2~/^-$/) { print $3} ' 
              # ^^ ^ ^^ ^regex match 

~は、正規表現のマッチ演算子であり、そして//は正規表現を区切る:あなたはまた、正規表現でそれを行うことができます。 編集^$ので、正規表現は、フィールド全体に一致し、かつ、例えば、$1は単にハイフンが含まれている場合は成功しないです。

cygwinのgawk 4.1.3でテスト済みです。

+0

これは実際に意図したとおりに機能しています。ありがとうございます。私は読んでいる間に 'BEGIN'の正確な使用をスキップしているに違いありません。私はまったく新しいawkです。完全で非常に教育的な答えをありがとう。 – Timmiej93

+0

@ Timmiej93 awkは楽しいです - 私はあなたの成功をお祈りします!はい、入力の最初の行が読み取られる前に、BEGINは1回だけ発生します。 – cxw

+1

@ Timmiej93すぐに最初の回答を受け入れると、より良い回答が得られたとしても、それは通常は唯一の回答です。質問を投稿してから数時間後に回答を受け入れることをお勧めします。答えが1つではなく、複数の回答の中から選択することができます。また、[mcve]に簡潔でテスト可能なサンプル入力と期待される出力を含めるように編集して、問題の悪い解決方法を実装するのを助けるのではなく、問題に対する良い解決策を確実に得るようにします。 –

関連する問題