免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4235 | 回复: 24

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

论坛徽章:
0
发表于 2009-02-19 16:59 |显示全部楼层
举个类子
/etc/passwd
root:0:0:root:/root:/bin/bash
daemon:1:1:daemon:/usr/sbin:/bin/sh
bin:2:2:bin:/bin:/bin/sh
sys:3:3:sys:/dev:/bin/sh
sync:4:65534:sync:/bin:/bin/sync
games:5:60:games:/usr/games:/bin/sh
man:6:12:man:/var/cache/man:/bin/sh
lp:7:7:lp:/var/spool/lpd:/bin/sh
mail:8:8:mail:/var/mail:/bin/sh
news:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh

/etc/shadow

root:GXjm8nGJ4l7a11r.:14288:0:99999:7:::
cctv:^(*&(*&(*&(*&:13991:0:99999:7:::
bin:*:13991:0:99999:7:::
sys:*:13991:0:99999:7:::
sync:*:13991:0:99999:7:::
games:*:13991:0:99999:7:::
man:*:13991:0:99999:7:::
lp:*:13991:0:99999:7:::
mail:*:13991:0:99999:7:::
news:*:13991:0:99999:7:::
uucp:*:13991:0:99999:7:::
proxy:*:13991:0:99999:7:::
www-data:*:13991:0:99999:7:::

类似这样的2个文件。把/etc/passwd 里面的$1用户和/etc/shawd的$1相互对于的$3附到/etc/passwd的$0后面。
就是一个用户名对应的在shadow中的密码行。

这个我一直感觉用awk可以做的。就是没有思路。




这个/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是无顺序的。。。

[ 本帖最后由 大狗狗 于 2009-2-19 17:55 编辑 ]

论坛徽章:
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
发表于 2009-02-19 17:03 |显示全部楼层
awk -F: 'NR==FNR{a[$1]=$3}NR>FNR{print $0":"a[$1]}' /etc/shadow /etc/passwd

论坛徽章:
0
发表于 2009-02-19 17:05 |显示全部楼层

回复 #2 ly5066113 的帖子

万分感谢。 我看了awk的教程。没有明白过来awk怎么处理2个文件的。 用perl  写了一个,感觉有点脱裤子放屁。

论坛徽章:
0
发表于 2009-02-19 17:07 |显示全部楼层
NR==FNR  awk的教程里面 这两个貌似相同的说。

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

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

论坛徽章:
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
发表于 2009-02-19 17:09 |显示全部楼层

回复 #4 大狗狗 的帖子

打出来一看就明白了。

awk '{print NR,FNR,$0}' /etc/shadow /etc/passwd

论坛徽章:
0
发表于 2009-02-19 17:10 |显示全部楼层
密码行应该是$2吧

论坛徽章:
0
发表于 2009-02-19 17:14 |显示全部楼层
原帖由 大狗狗 于 2009-2-19 17:07 发表
NR==FNR  awk的教程里面 这两个貌似相同的说。

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

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


条件NR==FNR
只在遍历第一个文件时才为真

论坛徽章:
0
发表于 2009-02-19 17:15 |显示全部楼层

回复 #5 ly5066113 的帖子

awk '{print NR,FNR,$0}' /etc/shadow /etc/passwd

25 25 gdm:*:13991:0:99999:7:::
26 26 pulse:*:13991:0:99999:7:::
27 27 messagebus:*:13991:0:99999:7:::
28 28 avahi:*:13991:0:99999:7:::
29 29 polkituser:*:13991:0:99999:7:::
30 30 haldaemon:*:13991:0:99999:7:::
31 31 dog1$/Fm0E23Z$YHI.PL69MCwdmYuYxLHkl0:14287:0:99999:7:::
32 32 landscape:*:14286:0:99999:7:::
33 33 Debian-exim14288:0:99999:7:::
34 34 fetchmail:*:14288:0:99999:7:::
35 35 ntop:*:14294:0:99999:7:::
36 1 root:0:0:root:/root:/bin/bash
37 2 daemon:1:1:daemon:/usr/sbin:/bin/sh
38 3 bin:2:2:bin:/bin:/bin/sh
39 4 sys:3:3:sys:/dev:/bin/sh
40 5 sync:4:65534:sync:/bin:/bin/sync
41 6 games:5:60:games:/usr/games:/bin/sh
42 7 man:6:12:man:/var/cache/man:/bin/sh
43 8 lp:7:7:lp:/var/spool/lpd:/bin/sh
44 9 mail:8:8:mail:/var/mail:/bin/sh
45 10 news:9:9:news:/var/spool/news:/bin/sh

有所悟 。不过还是感觉很糊涂。。。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2009-02-19 17:17 |显示全部楼层
PS:题外话~~大狗狗怎么用猫的头像咧~?

NR是awk读取的记录数,
FNR是文件的读取的某文件的记录数..

读第一个文件的时候..
NR==FNR.第二个文件时NR就肯定大于FNR了..因为FNR又重新开始了..

论坛徽章:
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
发表于 2009-02-19 17:19 |显示全部楼层

回复 #8 大狗狗 的帖子

NR 就是 perl 的 $.
处理多少文件都一直累加的
FNR 是每个文件自己累加的,换了一个文件就从1开始
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP