免费注册 查看新帖 |

Chinaunix

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

求助:awk遇到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-29 11:21 |只看该作者 |倒序浏览
#函数目的,在目标文件中,将指定字段根据对应表,在目标文件最后一列增加对应值

文件gh2bm.txt 是工号和部门对应表表,文件均使用|分割


目的:把文件FILE_TMP中第19列是工号,根据工号对应表,在最后一列上增加部门名称,找不到或者工号为空(NUll),就不增加

baokan_gh_bm_sd()
{
FILE_TMP=$1

for line in `cat /app/webroot/baokan/gh2bm.txt `
do
gh=`echo $line|cut -d '|' -f1`
bm=`echo $line|cut -d '|' -f2`
awk -F '|'  -v a=$gh -v b=$bm  '{if ( $19 =='a' ) {printf("%s|%s\n",$0,b)}  else {printf("%s\n",$0)} }' ${FILE_TMP} > ${FILE_TMP}_$$.tmp

mv ${FILE_TMP}_$$.tmp ${FILE_TMP}
done
}
#end of baokan_gh_bm

现在的问题是,如果工号为空,按理说条件19 =='a' 应该不成立,但是实际上不能得到目的,实际效果是增加了很多部门值,非常奇怪

其次,如果没有找到,需要在最后一列上增机一个"|",如何表达?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2009-10-29 11:32 |只看该作者
'a' =>"a"
粗略看了看,有这个错误

论坛徽章:
0
3 [报告]
发表于 2009-10-29 12:34 |只看该作者
  1. awk -F '|' 'NR==FNR{a[$1]=$2}NR>FNR{if ($19 in a) print $0"|"a[$19];else print}' gh2bm.txt FILE_TMP
复制代码

论坛徽章:
0
4 [报告]
发表于 2009-10-29 12:38 |只看该作者
if ( $19 ==a )

论坛徽章:
0
5 [报告]
发表于 2009-10-29 15:00 |只看该作者
原帖由 ywlscpl 于 2009-10-29 12:34 发表
awk -F '|' 'NR==FNR{a[$1]=$2}NR>FNR{if ($19 in a) print $0"|"a[$19];else print}' gh2bm.txt FILE_TMP


够间接的,连for循环也不要了

但是我要求结果能够保存在$FILE_TMP 里面,而且不显示如何做

主要还是没有吃透你的写法

论坛徽章:
0
6 [报告]
发表于 2009-10-29 15:01 |只看该作者
原帖由 cjaizss 于 2009-10-29 11:32 发表
'a' =>"a"
粗略看了看,有这个错误


你的意思是:

'a' 不同于 "a"?

论坛徽章:
0
7 [报告]
发表于 2009-10-29 15:08 |只看该作者

回复 #6 tomorrower 的帖子

-v a=$gh 后,a是个awk变量,判断中直接用a就是了,给它穿件马甲就不是原来的它了

论坛徽章:
0
8 [报告]
发表于 2009-10-31 16:36 |只看该作者
原帖由 ywlscpl 于 2009-10-29 15:08 发表
-v a=$gh 后,a是个awk变量,判断中直接用a就是了,给它穿件马甲就不是原来的它了


非常感谢,'a'也能用,在其值不为空的时候

论坛徽章:
0
9 [报告]
发表于 2009-10-31 17:13 |只看该作者

回复 #8 tomorrower 的帖子

嗯,测试了一下,确实是这样。
应该是'a'经shell解释后再传给awk的是a,不过a是否是空不影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP