つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

AWK文字列のダブルクォート「"」要否

 コンピュータのプログラミングにおいて、スペースやダブルクォート(ダブルクォーテーション)の有無は決定的に重要です。スペースやダブルクォートのありなしで、ただそれだけのために、動かなったり、意図どおりの結果にならなかったりします。

プログラミング中にトラブル発生

 このことは、プログラミング言語AWKにおいても同様です。
 awkプログラム内では、文字列定数はダブルクォート(")で囲む必要があります。そういうルールになっています。
 だから、'$2 == "hogehoge"{print $3}' という書き方になります。
 一方で、部分文字列を含むのかの判定に正規表現を使用するには、部分文字列をスラッシュ(/)で囲みますが、このとき文字列にダブルクォートを付けてはいけません。
【誤】 '$2 ~ /"hoge"/{print $3}'
【正】 '$2 ~ /hoge/{print $3}'
となります。
 上記【誤】のような記述をすると、「ダブルクォートで囲まれたhoge」という文字列が第2フィールドに含まれていない限り、一致しません。
 そこで、「hoge」という文字列が第2フィールドに含まれているかの判定には、上記の【正】のように記述します。「正規表現パターンのスラッシュ内文字列には、ダブルクォートは付けない。」と、覚えることになります。
 スペース(空白)が混じった文字列が含まれるかの判定時には、ダブルクォートを付けそうになるかもしれません。ついつい、うっかりと・・・・。けれども、この場合でもダブルクォートは付けません。
 第2フィールドに、「 hoge 」というような、文字列前後にスペース(空白)の付いた文字列が含まれるかの判定では、次のようになります。
【誤】 '$2 ~ /" hoge "/{print $3}'
【正】 '$2 ~ / hoge /{print $3}'

 スペース(空白)以外の文字がフィールドセパレータ(入力フィールド区切り文字)の場合だと、一つのフィールドに「ho ge」のような、ho と ge の間にスペース(空白)があるデータが入力されていることもあり得ます。その場合の記述も、次のとおりです。
 '$2 ~ /ho ge/{print $3}'
 そのように、スペースの混じる文字列でも、スラッシュ内の文字列にはダブルクォートは付けません。
 ダブルクォートが必要だったり、不要だったり、紛らわしいところはありますが、これも慣れでしょう。体で覚えるしかないでしょう。

 それではまた次の記事で
   goosyun