引用する

引用する

私が使用した一般的なtsvファイルの一部

10  Interstellar    Main Theme Extended UDVtMYqUAyw
11  Journey XvG78AmBLc4
12  Jurassic Park Music & Ambience  Amazing Soundscapes and Music   PPl__iyIg6w
13  Lord of the Rings   Sound of The Shire  chLZQtCold8
14  Lord of the Rings   The Shire: Sunset at Bag End    uBmbI8dzc-M

以下は、すべてのtsvファイルの2番目の列でlorを検索します(大文字と小文字を区別しません)。

awk '$2~IGNORECASE = 1;/lord/{print}' *.tsv 

13      Lord of the Rings       Sound of The Shire      chLZQtCold8
14      Lord of the Rings       The Shire: Sunset at Bag End    uBmbI8dzc-M

Lordこれでb​​ash環境変数に渡したいと思います。

$ awk -v Pattern="Lord" '$2~Pattern{print}' *.tsv 
13      Lord of the Rings       Sound of The Shire      chLZQtCold8
14      Lord of the Rings       The Shire: Sunset at Bag End    uBmbI8dzc-M

質問

大文字と小文字を区別せずにパターンマッチングを実行するには?

以下を試しましたが、機能しません

awk -v Pattern="lord" '$2~IGNORECASE = 1;Pattern{print}' *.tsv

awk -v Pattern="lord" 'IGNORECASE = 1;$2~Pattern{print}' *.tsv

awk -v Pattern="lord" 'BEGIN {IGNORECASE = 1}  {$2~Pattern{print}}' *.tsv 

awk -v Pattern="Lord" '{IGNORECASE = 1; $2~Pattern}' *.tsv 

引用する

ベストアンサー1

まず、あなたが思うように動作するかどうか疑われます。 AFAIKは$2~IGNORECASE = 1;/lord/{print}値を結果(たとえば)と比較し、結果がtrueの場合はデフォルトで印刷します。そして比較1IGNORECASE$2$2 ~ 1$0$0/lord/返品$0これが本当なら印刷してください。

大文字と小文字を区別せずに比較したい場合は、$2次のものを使用できます。

gawk 'BEGIN{IGNORECASE = 1} $2 ~ /lord/{print}` *.tsv

そうでなければ

gawk 'BEGIN{IGNORECASE = 1} $2 ~ /lord/` *.tsv

変数に対応するものは次のとおりです。

gawk -v Pattern="lord" 'BEGIN{IGNORECASE = 1} $2 ~ Pattern' *.tsv

これはIGNORECASE標準のawk機能ではないことに注意してください。私が知っている限り、GNU awk(gawk)だけがそれをサポートしています。移植性のために、特定のケースへの入力を使用またはインポートtoupperできます。tolower

おすすめ記事