首页 > 解决方案 > 带有重复行的 awk 合并文件

问题描述

首先,对不起我的英语(这是我第一次使用 StackOverflow)。我正在尝试将两个文件混合在一起,awk并且我尝试了以下方法:

文件 1:

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

预期输出:在文件 1 中,第 2 列和第 4 列是文件 2 的 ID,在文件 2 中,我添加了第 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

解决方案


$ 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...,也许您读101或其他内容。


推荐阅读