一个awk正则表达式的问题: awk '{if($3="FuTian" && $4="M")print $0}' student.dat

student.dat文件为:Tom116001FuTianM90John116005NanShanM85Mary116018LuoHuW65Steven116030Ya... student.dat文件为:
Tom 116001 FuTian M 90
John 116005 NanShan M 85
Mary 116018 LuoHu W 65
Steven 116030 YanTian M 78
为从文件中抽取家住福田区(FuTian)的男同学。
一本书上用了 awk '{if($3="FuTian" && $4="M")print $0}' student.dat
可是,我执行后得到的结果却是:
Tom 116001 1 M 90
John 116005 1 M 85
Mary 116018 1 M 65 //注意这行,它改变了性别值。
我用了另外一条,awk '{if($3~/FuTian/&&$4~/M/)print $0}' student.dat
得到了预期的结果:
Tom 116001 FuTian M 90

我的问题是:用第一条命令,错误在哪?(还改变了性别值)

Steven 116030 1 M 78
第一条命令的执行结果是:
Tom 116001 1 M 90
John 116005 1 M 85
Mary 116018 1 M 65 //请注意这行。
Steven 116030 1 M 78

(前面编辑问题时出现了点问题,特此补充)
展开
 我来答
少有人教的那些事
2011-06-20 · TA获得超过8452个赞
知道大有可为答主
回答量:1.1万
采纳率:50%
帮助的人:2111万
展开全部
C语言中用system() 执行shell命令:system("shell命令")
主要需要解释的是awk,awk主体中的语法其实与C类似,只不过其中用到了正则匹配。
格式:awk '' 文件
backbone.c就是awk要处理的文件。

$0~/^\\/\\*\\*/ :
格式:$0 ~ /正则表达式/
作用:判断$0是否匹配正则表达式 ^\\/\\*\\*
含义:awk是逐行读入并处理的,$0代表整行数据;
正则表达式中 ^ 表示一行的开头,斜杠前要加转义符以免被认为是正则表达式的定界符,*表示匹配0个或多个前面的字符。

总体来讲,就是只处理backbone.c文件中匹配 /^\\/\\*\\*/ 的行与匹配 /\\*\\*\\// 的行中间的内容,并通过print打印到屏幕。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bshingsky
2011-06-19
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
awk 等于是==,$3=="FUTIAN" && $4=="M"就可以了
=相当于赋值
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mingtian8579
2011-06-18
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式