找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

用awk数组处理两个文件的例子 - Shell - ChinaUnix.net

2009-12-20 13:10| 发布者: admin| 查看: 223| 评论: 0|原作者: 青鸾峰

BBS.ChinaUnix.net首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索



免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助





用awk数组处理两个文件的例子

12345??

首页 ? 论坛 ? Shell ? 论坛跳转 ... > Linux论坛 > BSD > BSD文档中心 > Solaris > Solaris文档中心 > 互操作专区 > AIX > IBM智慧体验快车 > AIX文档中心 > AS400 > HP-UX > HP文档中心 > SCO UNIX > SCO文档中心 > Tru64 UNIX > IRIX > Mac OS X > C/C++ > Shell > Java > Java文档中心 > Php > php文档中心 > Perl > Python > Python文档中心 > Web开发 > 软件工程 > 中间件技术 > GUI编程 > 软件配置管理 > VOIP开发技术 > CPU与编译器 > Ruby > OpenAPI > Functional编程 > 数据仓库与数据挖掘 > 安全技术 > 网络技术 > 网络技术文档中心 > 存储备份之家 > 存储文档中心 > 存储业界 > 存储资源下载 > 服务器及硬件技术 > 门户网站运维 > 龙芯技术 > MySQL > MySQL文档中心 > Sybase > Oracle > PostgreSQL > DB2 > Informix > Web服务器 > Mail服务器 > FTP服务器 > DNS服务器 > Proxy服务器 > LDAP > VPN > Lotus > Samba > 金融行业 > 电信行业 > 互联网行业 > 制造行业 > 医卫行业 > 教育行业 > 电子政务 > 信息安全 > 交通行业 > IT业界新闻与评论 > 科技快报 > IT职业生涯 > IT培训与认证 > IT二手大厅 > IT图书与评论 > 清茶斋 > 各地快讯 > 投资理财 > 财经快报 > 运动地带 > 体坛快报 > 快乐数码摄影 > 摄影比赛专区 > 影音娱乐 > 文娱播报 > 外语沙龙 > 游戏玩家 > 旅游天下 > IT爱车族 > 汽车快报 > 文学小说 > 美食美色 > 美食菜谱 > CU技术图书大系 > CU活动专区 > 站务交流 > 博客站务交流区 > 下载频道交流区 > 空间圈子交流区 最近访问的论坛 ... Solaris


“ChinaUnix技术图书大系”作者招募令 | 时代迎新贺礼 预存1000返300 | SUSE linux助力数据中心大会!| 2009年梭子鱼网络应用调查| 无线网络安全现状调查

[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
本主题由 waker 于 2008-8-28 12:44 关闭

mocou (莫愁)

荣誉版主-精灵使





CU编号: 202014
注册:2004-11-24
最后登录: 2009-02-18
帖子:3293
精华:8

可用积分:3135 (小富即安)
信誉积分:105
专家积分:111 (本版:0)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


[推广获积分]
1楼 发表于 2005-7-13 21:03
收了本论坛的三个例子


QUOTE:
1、用某一文件的一个域替换另一个文件中的的特定域?
http://bbs.chinaunix.net/forum/viewtopic.php?t=500015
文件passwd:
s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:x:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:x:529:529::/home/dz02/s2002408032823:/bin/pw

文件shadow:
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7:::
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7:::
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::

用shadow文件中的密文部分替换passwd中的"x",生一个新passwd文件,如下所示
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:529:529::/home/dz02/s2002408032823:/bin/pw


[Copy to clipboard] [ - ]
CODE:
awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwd

NR==FNR,第一个文件shadow,以$1为下标,将$2的值赋给数组a
NR>FNR,第二个文件passwd,将文件shadow$2的值赋值给文件passwd




QUOTE:
2、
cat file1:
0011AAA 200.00 20050321
0012BBB 300.00 20050621
0013DDD 400.00 20050622
0014FFF 500.00 20050401

cat file2:
I0011 11111
I0012 22222
I0014 55555
I0013 66666

规则:比较 file1的1-4字符 和 file2的2-5 字符,如果相同,将file2 的第二列 与 file1 合并 file3

0011AAA 200.00 20050321 11111
0012BBB 300.00 20050621 22222
0013DDD 400.00 20050622 66666
0014FFF 500.00 20050401 55555


[Copy to clipboard] [ - ]
CODE:
awk 'NR==FNR{a[substr($1,2,5)]=$2}NR>FNR&&a[b=substr($1,1,4)]{print $0, a[b]}' file2 file1 >file3






QUOTE:
3、如果文件a中包含文件b,则将文件b的记录打印出来
http://bbs.chinaunix.net/forum/viewtopic.php?t=520411

文件a:
10/05766798607,11/20050325191329,29/0.1,14/05766798607
10/05767158557,11/20050325191329,29/0.08,14/05767158557

文件b:
05766798607
05766798608
05766798609
通过文件a和文件b对比,导出这样的文件出来.
10/05766798607,11/20050325191329,29/0.1,14/05766798607

a


[Copy to clipboard] [ - ]
CODE:
wk -F'[/,]' 'ARGIND==1{a[$0]}ARGIND>1{($2 in a);print $0}' b a
awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{($2 in a);print $0}' b a






QUOTE:
4、
file1文件内容
1 0.5 100
10 15 36.5
file2文件
50 10 9
3.2 1 5
将两个文件合成一个文件如:
51 10.5 109
13.2 16 41.5
就是对应的字段进行相加以后的数字。
awk '{for (i=1;i<=NF;i++) a=$i
getline <"file2"
for (i=1;iprintf $NF+a[NF] "\n"}' file1


[Copy to clipboard] [ - ]
CODE:
awk '{for (i=1;i<=NF;i++) a[i]=$i;getline <"file2";for (i=1;i





QUOTE:
5、
文件a
1000 北京市 地级 北京市 北京市
1100 天津市 地级 天津市 天津市
1210 石家庄市 地级 石家庄市 河北省
1210 晋州市 县级 石家庄市 河北省
1243 滦县 县级 唐山市 河北省
1244 滦南县 县级 唐山市 河北省

b文件:
110000,北京市
120000,天津市
130000,河北省
130131,平山县
130132,元氏县
这样的字段
a中第二列在b中可能有可能没有,需要把有的匹配起来生成新的一列:要包含a和b的第一列。没有匹配的按照b原来的格式进行输出。


[Copy to clipboard] [ - ]
CODE:
awk 'BEGIN{FS="[ |,]";OFS=","}NR<=FNR{a[$2]=$1}NR>FNR{print $1,$2,a[$2]}' a b






QUOTE:
6、
file1的第一列与file2的第3列相同,
file1的第二列与file2的第4列的3-5位相同,
file1的第三列与file2的最后一列相同,
# cat file1
AAA 001 1000.00
BBB 001 2000.00
DDD 002 4000.00
EEE 002 5000.00
FFF 003 6000.00
# cat file2
01 1111 AAA WW001 $$$$ 1000.00
02 2222 BBB GG001 %%%% 2000.00
03 3333 CCC JJ001 **** 3000.00
04 4444 DDD FF002 &&&& 4000.00
05 5555 EEE RR002 @@@@ 5000.00
06 666 FFF UU003 JJJJ 6000.00
07 777 III II005 PPPP 7000.00
08 8888 TTT TT008 TTTT 8000.00


[Copy to clipboard] [ - ]
CODE:
# awk 'NR<=FNR{a[$1]=$1"x"$2"x"$3}
> NR>FNR{b=substr($4,3);c=$3"x"b"x"$6;if(c==a[$3]) print}' file1 file2
01 1111 AAA WW001 $$$$ 1000.00
02 2222 BBB GG001 %%%% 2000.00
04 4444 DDD FF002 &&&& 4000.00
05 5555 EEE RR002 @@@@ 5000.00
06 666 FFF UU003 JJJJ 6000.00



还有什么好例子,欢迎添加 :em03:



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

祈愿家人平安,快乐!

《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

寂寞烈火

老法王





CU编号: 187152
注册:2004-10-1
最后登录: 2009-04-11
帖子:24323
精华:5

可用积分:22144 (巨富豪门)
信誉积分:110
专家积分:171 (本版:102)
空间积分:1425
推广积分:0

来自:北京海淀
状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
2楼 发表于 2005-7-14 01:18
用awk数组处理两个文件的例子


学习~~~ :mrgreen:



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


Window$ XP Professional service pack 2
CYGWIN_NT-5.1 + GNU bash version 3.2.39


《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

mocou (莫愁)

荣誉版主-精灵使





CU编号: 202014
注册:2004-11-24
最后登录: 2009-02-18
帖子:3293
精华:8

可用积分:3135 (小富即安)
信誉积分:105
专家积分:111 (本版:0)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


[推广获积分]
3楼 发表于 2005-7-15 11:16
用awk数组处理两个文件的例子


up



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

祈愿家人平安,快乐!

《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

mymm

版主-大天使




CU编号: 9162
注册:2002-5-22
最后登录: 2009-01-02
帖子:2055
精华:4

可用积分:1888 (家境小康)
信誉积分:100
专家积分:0 (本版:0)
空间积分:2
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


[推广获积分]
4楼 发表于 2005-7-18 17:46
用awk数组处理两个文件的例子


很好!

学习ing!



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

killua

精灵王




CU编号: 51562
注册:2003-4-12
最后登录: 2009-03-11
帖子:337
精华:1

可用积分:355 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

来自:浙江杭州
状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
5楼 发表于 2005-8-2 13:28
用awk数组处理两个文件的例子


i love it



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

剑是凶器,剑术是杀人的伎俩

《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

herolyh

精灵




CU编号: 206874
注册:2004-12-11
最后登录: 2009-03-28
帖子:231
精华:0

可用积分:214 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
6楼 发表于 2005-8-2 17:36
用awk数组处理两个文件的例子


awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwd

这段代码的意思我明白,就是对于数组的运用不太明白。a[$1]这是什么意思,数组怎么这样定义?数组使用的时候不需要定义什么吗?



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

herolyh

精灵




CU编号: 206874
注册:2004-12-11
最后登录: 2009-03-28
帖子:231
精华:0

可用积分:214 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
7楼 发表于 2005-8-3 12:52
用awk数组处理两个文件的例子


怎么没有人回答我?



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

mocou (莫愁)

荣誉版主-精灵使





CU编号: 202014
注册:2004-11-24
最后登录: 2009-02-18
帖子:3293
精华:8

可用积分:3135 (小富即安)
信誉积分:105
专家积分:111 (本版:0)
空间积分:0
推广积分:0

状态:...保密...

[个人空间] [短信] [博客]


[推广获积分]
8楼 发表于 2005-8-3 13:26
用awk数组处理两个文件的例子


a[s2002408030068]=$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1

a[s2002408032819]=$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0

a[s2002408032823]=$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

herolyh

精灵




CU编号: 206874
注册:2004-12-11
最后登录: 2009-03-28
帖子:231
精华:0

可用积分:214 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
9楼 发表于 2005-8-3 17:34
用awk数组处理两个文件的例子


mocou mm果然很厉害!!!!能不能告诉我你的qq,我有很多问题要请教!!!!



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!

herolyh

精灵




CU编号: 206874
注册:2004-12-11
最后登录: 2009-03-28
帖子:231
精华:0

可用积分:214 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


[推广获积分]
10楼 发表于 2005-8-4 10:35
用awk数组处理两个文件的例子


awk 'NR==FNR{a[substr($1,2,5)]=$2}NR>FNR&&a[b=substr($1,1,4)]{print $0, a}' file2 file1 >file3

这是什么意思?



您对本贴的看法:鲜花[0] 臭蛋[0]
《开源时代》杂志频道开张!邮件订阅开通! | CU技术图书视频系列第一期发布 | 2009年首届中国云计算大会诚邀您的参与!



首页 ? 论坛 ? Shell ? 12345??




论坛跳转 ... > Linux论坛 > BSD > BSD文档中心 > Solaris > Solaris文档中心 > 互操作专区 > AIX > IBM智慧体验快车 > AIX文档中心 > AS400 > HP-UX > HP文档中心 > SCO UNIX > SCO文档中心 > Tru64 UNIX > IRIX > Mac OS X > C/C++ > Shell > Java > Java文档中心 > Php > php文档中心 > Perl > Python > Python文档中心 > Web开发 > 软件工程 > 中间件技术 > GUI编程 > 软件配置管理 > VOIP开发技术 > CPU与编译器 > Ruby > OpenAPI > Functional编程 > 数据仓库与数据挖掘 > 安全技术 > 网络技术 > 网络技术文档中心 > 存储备份之家 > 存储文档中心 > 存储业界 > 存储资源下载 > 服务器及硬件技术 > 门户网站运维 > 龙芯技术 > MySQL > MySQL文档中心 > Sybase > Oracle > PostgreSQL > DB2 > Informix > Web服务器 > Mail服务器 > FTP服务器 > DNS服务器 > Proxy服务器 > LDAP > VPN > Lotus > Samba > 金融行业 > 电信行业 > 互联网行业 > 制造行业 > 医卫行业 > 教育行业 > 电子政务 > 信息安全 > 交通行业 > IT业界新闻与评论 > 科技快报 > IT职业生涯 > IT培训与认证 > IT二手大厅 > IT图书与评论 > 清茶斋 > 各地快讯 > 投资理财 > 财经快报 > 运动地带 > 体坛快报 > 快乐数码摄影 > 摄影比赛专区 > 影音娱乐 > 文娱播报 > 外语沙龙 > 游戏玩家 > 旅游天下 > IT爱车族 > 汽车快报 > 文学小说 > 美食美色 > 美食菜谱 > CU技术图书大系 > CU活动专区 > 站务交流 > 博客站务交流区 > 下载频道交流区 > 空间圈子交流区 最近访问的论坛 ... Solaris


控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
个人空间管理
升级个人空间

基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计


Copyright ? 2001-2009 ChinaUnix.net All Rights Reserved 联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处
京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP


Processed in 0.063605 second(s), 7 queries
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
个人空间管理
升级个人空间

基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:22 , Processed in 0.188553 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部