前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用awk数组处理两个文件的例子

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

作者头像
一见
发布2019-03-14 16:42:38
1.1K0
发布2019-03-14 16:42:38
举报
文章被收录于专栏:蓝天

收了本论坛的三个例子

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;i" "; printf $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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档