免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 大狗狗
打印 上一主题 下一主题

求教一个awk文本合并的问题(已解决,消化中,。) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-19 17:20 |只看该作者

回复 #9 liaosnet 的帖子

爱猫的大狗狗

论坛徽章:
0
12 [报告]
发表于 2009-02-19 17:24 |只看该作者
原帖由 大狗狗 于 2009-2-19 17:07 发表
NR==FNR  awk的教程里面 这两个貌似相同的说。

NR 当前记录数。
FNR 同 NR,但相对于当前文件。

'NR==FNR{a[$1]=$3}NR>FNR  这里看不明白


NR为当前记录数
FNR读取过的记录行数(一个文件的时候NR==FNR,当文件数大于1的时候NR>FNR)
上面就是说当读取第一个文件的时候设置数组a[$1]=$3
当读取到第二个文件的时候,此时NR>FNR就答应出你所需要的东东!!!

论坛徽章:
0
13 [报告]
发表于 2009-02-19 17:25 |只看该作者
这个/ect/passwd  /etc/shadow 只是我举例的文件。实际文件  他们之间是没有任何联系的。除了第一个文件的$1 会等于第2个文件的其中一行的$1  这是无规律的。。。。。。
file 1
-------------------
cctv       1000   99
game     888    55.6
ZZAV      000     .56

file2
dagou    china    gansu
cctv        china    beijing
abc         where   where
game      home   home

也就是说file1里面和file2里面有联系的只有 cctv   game  而且NR是无顺序的。。。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
14 [报告]
发表于 2009-02-19 17:28 |只看该作者

回复 #13 大狗狗 的帖子

NR==FNR 只是为了判断awk正在处理第一个文件,和里面的内容一点关系都没有。。。

论坛徽章:
0
15 [报告]
发表于 2009-02-19 17:32 |只看该作者
cat file1
cctv       1000   99
game     888    55.6
ZZAV      000     .56

cat file2
dagou    china    gansu
cctv        china    beijing
abc         where   where
game      home   home

awk -F 'NR==FNR{a[$1]=$3}NR>FNR{print $0":"a[$1]}'  file1 file2
awk -F 'NR==FNR{a[$1]=$3}NR>FNR{print $0":"a[$1]}'  file2 file1

awk -F '{a[$1]=$3}NR>FNR{print $0":"a[$1]}'  file2 file1

awk -F '{a[$1]=$3}NR>FNR{print $0":"a[$1]}'  file1 file2

无任何输出。

论坛徽章:
0
16 [报告]
发表于 2009-02-19 17:33 |只看该作者
应该是 
cctv       1000   99  gansu
game     888    55.6  home

file1的$0  file2的$3

论坛徽章:
0
17 [报告]
发表于 2009-02-19 17:36 |只看该作者

回复 #16 大狗狗 的帖子

[test@erpdataserver ~]$ awk  'NR==FNR{a[$1]=$3}NR>FNR{print $0,a[$1]}'  file2 file1   
cctv       1000   99 beijing
game     888    55.6 home
ZZAV      000     .56
这个结果不对。再改改

[ 本帖最后由 我是DBA 于 2009-2-19 17:38 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
18 [报告]
发表于 2009-02-19 17:37 |只看该作者

回复 #16 大狗狗 的帖子

awk 'NR==FNR{a[$1]=$3}NR>FNR&&($1 in a){print $0,a[$1]}' file2 file1

论坛徽章:
0
19 [报告]
发表于 2009-02-19 17:39 |只看该作者

回复 #18 ly5066113 的帖子

老天阿。 这就是我要的阿。  我的好好理解下,

论坛徽章:
0
20 [报告]
发表于 2009-02-19 17:43 |只看该作者
NR==FNR{a[$1]=$3} 在读file2的时候  把$3 放到数组a里面。
NR>FNR&&  接着读file1的时候 并且


($1 in a){print $0,a[$1]}  $1 in a 这个我不太理解。类似于@lines.find('tom')吗? 
前面是条件 还是循环???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP