我有一个文件,在第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 -斐济,斐济美元?
发布于 2021-01-29 08:00:32
IGNORECASE变量是一个特殊变量,它影响正则表达式和字符串操作中的大小写敏感性(如果FS是正则表达式,也可以在字段拆分中使用,但有关详细信息,请参阅系统上的GNU awk手册),但仅针对awk。没有其他awk有这个变量。
从您所说的在评论中来看,您的默认awk似乎是mawk,而不是GNU awk。
要在非GNU awk中执行不区分大小写的正则表达式匹配,只需使用tolower()或toupper()将字符串转换为小写或大写,然后使用全小写或大写正则表达式:
awk -F , 'tolower($0) ~ /fiji/ { print NR, "-", $0 }' currencies.csvawk -F , 'toupper($0) ~ /FIJI/ { print NR, "-", $0 }' currencies.csv您还可以使用grep来完成您在这里所做的任务:
grep -n -i 'fiji' currencies.csv输出的格式略有不同,每一行都以n:作为前缀,其中n是原始文件中的行号。显然,可以通过sed 's/:/ - /'传递输出来修复这个问题。
https://unix.stackexchange.com/questions/631537
复制相似问题