免费注册 查看新帖 |

Chinaunix

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

两文件字段对比? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-24 08:27 |只看该作者 |倒序浏览
file1.txt
贷款账号(信贷)        客户名称        贷款余额        借款日期        到期日期         止息日期
22002601300000000759        张1        900.00        19890101        19890630        19890101
22002601300000001187        张3        1,400.00        20000407        20001230        20000407
22002601300000001344        张5        1,200.00        20001202        20011201        20010101
22002601300000001708        曹2        6,550.00        20020219        20030215        20050101
22002601300000001963        张3        2,000.00        19990205        19991230        19990205
22002601300000004306        曹2        3,000.00        20050313        20060311        20050313
22002601300000004546        曹3        2,000.00        20050328        20060327        20050328
22002601300000005154        郭2        1,000.00        20040501        20050426        20060201
22002601300000007143        郭3        8,000.00        20060327        20070325        20060327
22002601300000012234        郭3        30,00.00        20081229        20091228        20081229
***********************


file2.txt
贷款账号(信贷)        客户名称        贷款余额        借款日期        到期日期         止息日期
22002601300000000759        张1        900.00        19890101        19890630        19890101
22002601300000001187        张3        1,400.00        20000407        20001230        20000407
22002601300000001344        张5        1,200.00        20001202        20011201        20010101
22002601300000001708        曹2        6,550.00        20020219        20030215        20050101
22002601300000001963        张3        2,000.00        19990205        19991230        19990205
22002601300000004306        曹2        3,000.00        20050313        20060311        20050313
22002601300000004546        曹3        2,000.00        20050328        20060327        20050328
22002601300000005154        郭2        1,000.00        20040501        20050426        20060201
22002601300000007143        郭3        8,000.00        20060327        20070325        20060327
22002601300000012234        郭3        30,00.00        20081229        20091228        20081229
***********************
  前提:两个文件中的贷款帐号在每个文件中都是唯一的.   字段分隔符为"逗号"
问题1:现想通过file1.txt中的贷款帐号全检索(两个文件中的帐号不一定都在同一行上)file2.txt中对应帐号的记录,找到后,核对帐号后的每一字段,把不同的字段写入file3.txt中
问题2:单比较两文件帐号一栏,把file1.txt有,但file2.txt中没有的与file2.txt有,但file1.txt没有的帐号输入至zh.txt文件内

在此先道谢了!

论坛徽章:
0
2 [报告]
发表于 2009-11-24 08:50 |只看该作者
问题2:
awk 'NR==FNR{a[$1]=1;c[$1]=1}NR>FNR{b[$1]=1;c[$1]=1}END{for(k in c){if((a[k]==1&&b[k]!=1)||(a[k]!=1&&b[k]==1)){print k}}}' file1.txt file2.txt >zh.txt

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2009-11-24 08:53 |只看该作者

回复 #1 oicq63236 的帖子

逗号是字段分隔符?

论坛徽章:
0
4 [报告]
发表于 2009-11-24 08:57 |只看该作者
问题1:

awk 'NR==FNR{a[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}NR>FNR{b[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}END{for(k in c){if(((k in a)&&(k in b))){if(a[k]!=b[k]){print "file1",k,a[k];print "file2",k,b[k]}}}}' file1.txt file2.txt >file3.txt

[ 本帖最后由 sunbw001 于 2009-11-24 09:00 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-11-24 10:30 |只看该作者

回复 #2 sunbw001 的帖子

报KSH:0403-057 syntax error: ')' is not expected.错误,

问题一的语句运行没问题,但是生成的file3.txt什么都没有

论坛徽章:
0
6 [报告]
发表于 2009-11-24 10:31 |只看该作者

回复 #3 blackold 的帖子

嗯,上面我是为美观,改为了TAB分隔,实际上是逗号分隔符

论坛徽章:
0
7 [报告]
发表于 2009-11-24 10:36 |只看该作者

回复 #5 oicq63236 的帖子

awk 'NR==FNR{a[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}NR>FNR{b[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}END{for(k in c){if((k in a)&&(k in b)){if(a[k]!=b[k]){print "file1",k,a[k];print "file2",k,b[k]}}}}' file1.txt file2.txt

先试试它看输出结果没?

你列出的这些中,应该就是没有输出的。

[ 本帖最后由 sunbw001 于 2009-11-24 10:41 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-11-24 11:22 |只看该作者

回复 #7 sunbw001 的帖子

谢谢兄台,同行的可以核对,但是不同行的如何解决呢?
如:
file1.txt
22002601300000000759        张1        900.00   。。。。。。
22002601300000001187        张3        1,400.00  。。。。。。

file2.txt
22002601300000000759        张2        900.00   。。。。。。
22002601300000001187        张3        1,400.00  。。。。。。

可以核对出759帐号户名不一样(张1与张2)

但如果将file2.txt的顺序打乱,如下


22002601300000001187        张3        1,400.00  。。。。。。
22002601300000000759        张2        900.00   。。。。。。

就核对不出来了,swunbw001兄再帮出出招吧,呵呵,谢谢了

论坛徽章:
0
9 [报告]
发表于 2009-11-24 11:34 |只看该作者

回复 #8 oicq63236 的帖子

不会吧 这与同行与不同行没啥关系

[root@localhost pub]# cat data1
22002601300000000759        张1        900.00        19890101        19890630        19890101
22002601300000001187        张3        1,400.00        20000407        20001230        20000407
[root@localhost pub]# cat data2
22002601300000001187        张3        1,400.00        20000407        20001230        20000407
22002601300000000759        张2        900.00        19890101        19890630        19890101
[root@localhost pub]# awk 'NR==FNR{a[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}NR>FNR{b[$1]=$2" "$3" "$4" "$5" "$6;c[$1]=1}END{for(k in c){if((k in a)&&(k in b)){if(a[k]!=b[k]){print "file1",k,a[k];print "file2",k,b[k]}}}}' data1 data2
file1 22002601300000000759 张1 900.00 19890101 19890630 19890101
file2 22002601300000000759 张2 900.00 19890101 19890630 19890101
[root@localhost pub]#

论坛徽章:
0
10 [报告]
发表于 2009-11-24 11:35 |只看该作者

回复 #9 sunbw001 的帖子

我用的AIX,是系统?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP