首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk不会返回所需的输出

awk不会返回所需的输出
EN

Unix & Linux用户
提问于 2021-01-28 21:37:33
回答 1查看 128关注 0票数 0

我有一个文件,在第16行有国家和货币(学习awk):

代码语言:javascript
复制
bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$ sed -n '16p' currencies.csv 
FIJI,Fiji Dollar

当我使用awk提取一些值时,我没有得到预期的输出:

代码语言:javascript
复制
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 -斐济,斐济美元

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-01-29 08:00:32

IGNORECASE变量是一个特殊变量,它影响正则表达式和字符串操作中的大小写敏感性(如果FS是正则表达式,也可以在字段拆分中使用,但有关详细信息,请参阅系统上的GNU awk手册),但仅针对awk。没有其他awk有这个变量。

从您所说的在评论中来看,您的默认awk似乎是mawk,而不是GNU awk

要在非GNU awk中执行不区分大小写的正则表达式匹配,只需使用tolower()toupper()将字符串转换为小写或大写,然后使用全小写或大写正则表达式:

代码语言:javascript
复制
awk -F , 'tolower($0) ~ /fiji/ { print NR, "-", $0 }' currencies.csv
代码语言:javascript
复制
awk -F , 'toupper($0) ~ /FIJI/ { print NR, "-", $0 }' currencies.csv

您还可以使用grep来完成您在这里所做的任务:

代码语言:javascript
复制
grep -n -i 'fiji' currencies.csv

输出的格式略有不同,每一行都以n:作为前缀,其中n是原始文件中的行号。显然,可以通过sed 's/:/ - /'传递输出来修复这个问题。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/631537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档