Ubuntu
awk 不會返回所需的輸出
我有一個文件,第 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 - FIJI,Fiji Dollar?
該
IGNORECASE
變數是一個特殊變數,它影響正則表達式和字元串操作中的大小寫敏感性(如果FS
是正則表達式,也可以在欄位拆分中,但awk
有關詳細資訊,請參閱系統上的 GNU 手冊),但僅適用於 GNUawk
。沒有其他awk
人有這個變數。從您在評論中所說的話,似乎您的預設值
awk
是mawk
,而不是 GNUawk
。要在非 GNU 中進行不區分大小寫的正則表達式匹配,只需使用or
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/:/ - /'
.