2017-01-16 20 views
1

私は、ファイル内の1列目のためのawkを使って大文字小文字を区別しないVLOOKUPをやろうとしているが、そのはIGNORECASEを無視しても、3列に比較する方法と同じのawkを使用して小文字に一致しない大文字小文字を区別しないawkのVLOOKUP

awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}' 

cat f1.txt 
FOO,LONDON,45,789 
goo,US,46,9876 

cat f2.txt 
FOO,LONDON,45,789 
GOO,US,46,9876 


awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}' f1.txt f2.txt 

FOO,LONDON,45,789,45,789 
GOO,US,46,9876,NA,NA 

答えて

0

gawkへの特定の別の方法は、ゼロ以外の値に変数IGNORECASEを設定することで、GNU Awkページから次の抜粋を参照してください(組み込み変数を参照)。 IGNORECASEがゼロでない場合、すべてのregexpおよびstring操作は大文字小文字を無視します。

通常、IGNORECASEを使用して特定のルールのパターンに対してIGNORECASEを設定する簡単な方法はないため、特定のルールで大文字小文字を区別せず、他のルールで大文字小文字を区別することはできません.17これを行うには、またはtolower()。ただし、IGNORECASEで行うことができるのは、すべてのルールに対して大文字と小文字の区別をオンまたはオフにすることです。

だから、としてあなたの入力のために、それは(アレイ上の文句を言わない仕事IGNORECASEオンラインリファレンスを得ました)作品うん

awk -F, 'FNR==NR{a[tolower($1)]=$3","$4;next} {print ((tolower($1) in a) ? $0","a[tolower($1)] : $0",NA,NA");}' f1.txt f2.txt 
FOO,LONDON,45,789,45,789 
GOO,US,46,9876,46,9876 
+0

GNU Awk'stolower()機能を使用して、どのように代わりに最初の列 –

+0

の第三列のパターンマッチングをします@ Inian、最初の列の代わりに3列目のパターンマッチング方法。どちらのファイルも大文字と小文字が混在しています。この場合、小文字に変換されて一致します。 –

+0

@ sam_84:それはこの範囲を超えてまったく新しい質問です。あなたは入力と必要な出力を持つ新しいものとしてそれを聞かせますか? – Inian

関連する問題