私が使用した一般的な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
これでbash環境変数に渡したいと思います。
$ 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の場合はデフォルトで印刷します。そして比較1
IGNORECASE
$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