たとえば、このawk
チュートリアルには3つの例があります。
tolower($1) ~ /mary/ { print "CI Record: " $0; }
$0 !~ /Mary/ { print "Not Mary: " $0; }
$1 == "Mary" { print "Mary Record: " $0; }
awkでは、$0
は引数の行全体ですが、は$1
スペースで区切られた引数のリストの最初の引数にすぎません。つまり、「メアリーは小さな子羊を持っていた」をawkに通す$1
と、「メアリー」ですが、$0
「メアリーは小さな子羊を持っていた」です。2行目は、awkに指定された行全体でサブストリング「Mary」を見つけようとしています。
実際の例# 2
では、この構文のために正規表現を使用しています
/regex/
つまり、あなたの例では、文字通りのテキストMary
が行全体()のどこにも見つからない場合は$0
、awkコードを実行します。
一方、リテラルテキストとフィールド#1( )$1 == "Mary"
を直接比較しています。Mary
$1
最後tolower($1) ~ /mary/
に、フィールド#1で再びignre-case regex matchを使用しています。これは、$1
テキストがmary
ある場合(ignore-case)、残りのawkコードを実行することを意味します。
あなたのリンクの説明から(私の強調):
式は通常、フィールドの1つ、またはフィールドの1つに対する操作の結果のいずれかです。たとえば、次のAWKフィルタルールは、大文字と小文字を区別せずに最初のフィールドを「mary」と比較する方法、「Mary」を含まないすべてのレコードを照合する方法、および「メアリー」に対する最初のフィールド:
だからそれを分解する:
最初の1つ:
how to compare the first field to “mary” in a case-insensitive fashion
最初のフィールドを比較しているため、$1
「メアリー」を含まないすべてのレコードを照合する方法、
すべてのレコードを比較しているため、$0
三つ目
そして、最初のフィールドを「メアリー」と正確に比較する方法:
最初のフィールドを再度比較するため、を使用してい$1
ます。