-2

我有一个要求,其中fileA包含一个包含多列的行列表,其中一列emaillist被命名为emaillist[1,2,3,..]. 我已经定义了另一个文件fileB,我在其中为emailist[1,2,3,..]变量赋值。我阅读fileA并想emailist阅读fileB.

档案A:

XXX1 YYY1 emailist1
XXX2 YYY2 emailist2

文件B:

emailist1=abcd@xyz.com 
emailist2=xyz@zbc.com

外壳脚本:

Read fileA

email = $3

emailist1这是我的挑战,如何阅读fileB.

4

2 回答 2

3

使用join命令:

$ cat fileA
XXX1 YYY1 emailist1
XXX2 YYY2 emailist2

$ cat fileB
emailist1 abcd@xyz.com 
emailist2 xyz@zbc.com

$ join -1 3 -2 1 -o '1.1 1.2 2.2' <(sort fileA -k3,3) <(sort fileB)
XXX1 YYY1 abcd@xyz.com 
XXX2 YYY2 xyz@zbc.com

join命令要求首先对数据进行排序,因此我们在sort文件中emaillist加入ie 。该选项用于以几乎相同的方式指定要输出的字段,因为您没有明确指定我猜字段 1 和2 来自: 。column 3file 1column 1file 2-1 3 -2 1-ofileAfileB1.1 1.2 2.2

注意:将like=中的 改为空格。fileBsed 's/=/ /' fileB

于 2013-01-01T16:35:44.693 回答
1

您需要先读取fileB并将值添加到关联数组中,然后在fileA读取时将第三列替换为数组中的值。这个逻辑可以很容易地实现awk

awk 'FNR==NR { sub(/=/," "); a[$1]=$2; next } $3 in a { $3=a[$3] }1' fileB fileA

结果:

XXX1 YYY1 abcd@xyz.com
XXX2 YYY2 xyz@zbc.com
于 2013-01-02T01:24:14.483 回答