免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2560 | 回复: 3
打印 上一主题 下一主题

[SCO UNIX] 一个关于AWK的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-26 17:07 |只看该作者 |倒序浏览
在别人写的一个SH里看见这么一个语句。
awk ' BEGIN{FS="[|]";OFS="|"}
FNR==NR{a[$1]=$2}
FNR<NR{if(!a[$1]) {$1="13";print}
else {$1=a[$1];print}}
' wj wj1>wj2


大大们能告诉我每一条语句的意思吗?

论坛徽章:
0
2 [报告]
发表于 2007-02-26 21:50 |只看该作者
你还是到shell版块去吧!!!

论坛徽章:
0
3 [报告]
发表于 2007-02-27 14:32 |只看该作者
这个东西几句话说不清,还是去看awk的手册吧。
有本书叫《LINUX与UNIX Shell编程指南》,里面写得很详细的

论坛徽章:
0
4 [报告]
发表于 2007-03-02 08:27 |只看该作者
它在处理2个以|分割的文件
例如
文件1 wj 格式
id1|desc1
文件2 wj1格式
id2|desc2

FNR==NR{a[$1]=$2} 意思是处理第一个文件时 把 desc1 赋值给 数组 a 的 a[id1] 单元。
FNR<NR 条件是在处理第2文件成立。这样在处理第2 文件时
{if(!a[$1]) {$1="13";print}
else {$1=a[$1];print
如果a[$1] 是空,就把第2文件那行的第1列替换为 13 输出 如: 13|desc2
如果a[$1]非空,就是这个数组值已经在处理第1文件赋过值。就把$1替换为 a[$1] 即 文件1对应的$2。输出的就是 desc1|desc2

归纳一句 就是在文件2中以id2在文件1中查id1=id2的对应desc1 ,
找到输出 desc1|desc2
找不到输出 13|desc2



文件1
1|name1
2|name2
3|name3
5|name5
6|name6

文件2
1|name11
2|name22
3|name33
4|name44
5|name55
6|name66
7|name77
8|name88

输出结果
name1|name11
name2|name22
name3|name33
13|name44
name5|name55
name6|name66
13|name77
13|name88
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP