【发布时间】:2021-03-10 02:19:01
【问题描述】:
我需要使用一些规则合并两个文件。第一个file1 有x 个用户,file2 有y 个用户;在文件 1 中,只有在 $4 时拥有 1 的用户可用。
它应该搜索文件的第 3 列,“IPxx”(IPxx 对每个用户都是唯一的,并且可以在 xx 中包含空格),并将其与文件 2 的第 5 列(没有 IP,xx 匹配xx)。如果找到匹配项,则使用此公式将两者合并(F1 是 File1;F2 是 File 2):
$2(F1):$1(F1):$2(F2):$1(F2) :$3(F1):yyyy/mm/dd(今天的日期)
我这样做是为了查找 File1 上的可用人员:
sed 's/\IP//' File1.txt | awk -F '(:)' '{if($4==1)print $2":"$1":"$3}'
并整理File2
awk -F '(:)' '{print $2":"$1":"$3}'
现在我如何比较它们两者并使用该公式将它们合并在一起?
例子:
文件1
123:bacon white:IPES:0
456:eggs grey:IPUS:1
789:ham yellow:IPUK:1
文件2
1:foo foo:ES:abc
2:bar bar:US:def
3:tmp tmp:ES:ghi
4:baz baz:UK:jkl
5:qux qux:US:mno
6:spam spam:UK:pqr
7:xyz xyz:UK:stu
输出文件
eggs grey:456:bar bar:2:IPUS:2021/03/10
eggs grey:456:qux qux:5:IPUS:2021/03/10
ham yellow:789:baz baz:4:IPUK:2021/03/10
ham yellow:789:spam spam:6:IPUK:2021/03/10
ham yellow:789:xyz xyz:7:IPUK:2021/03/10
【问题讨论】:
-
既然 file1 第 1 行有
ES,而 file2 第 1 行和第 3 行有ES,为什么不显示bacon white:123:foo foo:1:IPES:2021/03/10?ES和tmp tmp也一样? -
因为 123:bacon white:IPES:0 以 0 结尾,所以只有以 1 结尾的才可用
标签: linux bash sorting awk sed