我有一个要求,其中fileA
包含具有多个列的行列表,其中一列是emaillist
,其名称为emaillist[1,2,3,..]
。我已经定义了另一个文件fileB
,我在其中为emailist[1,2,3,..]
变量赋值。我看了fileA
,想要阅读emailist
中定义的fileB
。
FILEA:
XXX1 YYY1 emailist1
XXX2 YYY2 emailist2
FILEB:
emailist1=abcd@xyz.com
emailist2=xyz@zbc.com
Shell脚本:
Read fileA
email = $3
以下是我的挑战,如何阅读emailist1
中定义的fileB
。
答案 0 :(得分: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
归档,然后column 3
加入file 1
column 1
} file 2
即-1 3 -2 1
。 -o
选项用于以相同的方式指定要输出的字段,因为您没有明确指定我认为来自fileA
的字段1和来自fileB
的字段2: 1.1 1.2 2.2
。
注意:将=
更改为fileB
中的空格,如sed 's/=/ /' fileB
。
答案 1 :(得分: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