带重复行的Awk合并文件

首先,对不起我的英语(这是我第一次上StackOverflow)。我试图将两个文件与 awk 我已经尝试了以下几点。

文件一:

49:6:2:8:5
46:8:3:6:15
47:8:5:6:104
6:3:10:8:3
48:6:1:10:2

文件2:

1:admin:admin:00000000A:admin@a:admin:admin
3:b:b:66666666b:b@b.b:bb:bb
4:w:w:22222222w:w@w.w:ww:ww
5:r:r:44444444r:r@r.r:rrr:rrr
6:ga:ga:55555555g:g@g.g:gg:gg
7:e:e:33333333e:e@e.e:ee:ee
8:u:u:77777777u:u@u.u:uu:uu
9:james:lopez:12312312a:jose@gmail.com:jose:perez
10:luois:asd:12312312a:jj@j.j:ju:an

输出:

6:3:10:8:3:b:b
48:6:11:10:2:ga:ga
47:8:5:6:104:u:u

使用的命令:

awk -v OFS=: 'NR==FNR { a[$2]=$0; next }$1 in a { print a[$1],$2,$3}' FS=: File1 File2

预期的输出: 在文件一中,第2列和第4列是文件二的ID,在文件二中,我增加了第2列和第3列。有的一定是两行或多行。

6:3:10:8:3:b:b:u:u
48:6:11:10:2:ga:ga:admin:admin
47:8:5:6:104:u:u:ga:ga
49:6:2:8:5:ga:ga:u:u
46:8:3:6:15:u:u:ga:ga

谢谢大家。

解决方案:

$ awk -F: -v OFS=: 'NR==FNR{a[$1]=$2 OFS $3; next} {print $0, a[$2], a[$4]}' f2 f1
49:6:2:8:5:ga:ga:u:u
46:8:3:6:15:u:u:ga:ga
47:8:5:6:104:u:u:ga:ga
6:3:10:8:3:b:b:u:u
48:6:1:10:2:ga:ga:luois:asd

先读取第二个文件来创建映射。第一个字段作为密钥,第二和第三个字段的内容用OFS保存在中间作为分隔符。当读取第一个文件时,打印行内容,然后从数组中获取基于第二和第四字段作为键的内容。

需要注意的是,你在问题中显示的预期输出与以下情况不符 48:6:1:10... 行,也许你读到 10 作为 1 或什么的。

给TA打赏
共{{data.count}}人
人已打赏
未分类

问题:在最终图片上停止CSS动画

2022-9-8 17:36:17

未分类

如何在多列数据表上进行rollapply操作?

2022-9-8 17:36:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索