16行目に国と通貨を含むファイルがあります(awk学習)。
bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$ sed -n '16p' currencies.csv
FIJI,Fiji Dollar
awkを使用していくつかの値を抽出すると、期待した結果は得られません。
bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$ awk 'BEGIN{IGNORECASE=1; FS=","} /fiji/ { print NR,"-",$0 }' currencies.csv
bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$
なぜ戻らないのか16 - フィジー、フィジードル?
答え1
このIGNORECASE
変数は、正規表現と文字列操作(正規表現FS
の場合はフィールドの分割、詳細についてはawk
システムのGNUマニュアルを参照)の大文字と小文字の区別に影響を与える特別な変数です。ただし、GNU専用ですawk
。他のものはawk
この変数を持っていません。
あなたが言ったことからコメントから、デフォルト設定がGNUawk
ではないようです。mawk
awk
GNU以外の場所で大文字と小文字を区別しない正規表現マッチングを実行するには、awk
文字列を小文字または大文字として使用または変換し、すべて小文字または大文字として正規表現を使用します。tolower()
toupper()
awk -F , 'tolower($0) ~ /fiji/ { print NR, "-", $0 }' currencies.csv
awk -F , 'toupper($0) ~ /FIJI/ { print NR, "-", $0 }' currencies.csv
grep
ここで行う作業にも使用できます。
grep -n -i 'fiji' currencies.csv
出力に少し形式が異なり、各行の前に元のファイルの行番号n:
が付けられます。n
明らかに出力をsed 's/:/ - /'
。