Awk 根据文件B中的查找/替换条件,查找并替换文件A中列中的值

Awk 根据文件B中的查找/替换条件,查找并替换文件A中列中的值,awk,replace,find,Awk,Replace,Find,我有两个文件。第一个是FileA,它由三个列组成(以制表符分隔),请参见下面的内容 菲拉 第二个是FileB,包含两列(以制表符分隔)FileB第1列包含FileA第2列中所有非唯一值的列表。FileB列2包含一个值列表,我希望它们在列1中的对应值替换为FileA中的值 文件 换句话说,我希望在FileA列2中找到与FileB列1匹配的所有值,并用FileB列2中相应的值替换它们,然后将新FileA输出到新文件(“FileA2”) 新文件A(文件A2)的输出应如下所示(即名称列2已全部更改为数字

我有两个文件。第一个是FileA,它由三个列组成(以制表符分隔),请参见下面的内容

菲拉

第二个是FileB,包含两列(以制表符分隔)FileB第1列包含FileA第2列中所有非唯一值的列表。FileB列2包含一个值列表,我希望它们在列1中的对应值替换为FileA中的值

文件

换句话说,我希望在FileA列2中找到与FileB列1匹配的所有值,并用FileB列2中相应的值替换它们,然后将新FileA输出到新文件(“FileA2”)

新文件A(文件A2)的输出应如下所示(即名称列2已全部更改为数字,每次更改都对应于文件B中的查找替换条件)

是否有任何awk、grep或sed一行程序可以做到这一点

注意:在现实生活中,我的“FileA”在第2列中有超过800000行和超过4000个唯一值,因此最好通过我的Linux终端进行

另外,为了将来参考,是否有任何一行程序可以从给定文件的单个列中提取唯一值列表


提前感谢您的帮助

下面的操作应该可以完成(
bash
):

#/usr/bin/env bash
加入-t$'\t'\

你会发现很少有人会为你写代码。当你提出一个问题和一些说明这个问题的代码时,这个网站最有效。我们鼓励您研究如何使用最适合您的工具转换这些数据。看。哪种语言?你好,诺布杰德。非常感谢你的回答和解释。我试过了,但似乎什么也没发生。我已经澄清了我的问题,现在我意识到其中一些可能不清楚,对此表示抱歉。@user10234826刚刚检查了命令,它可以在我的主机(Linux)上使用您提供的文件(
FileA
FileB
)。也许您的主机(比如MacOS)上有BSD命令行工具,而不是GNU工具(Linux)?我这么想是因为我已经预料到类似的问题(bash脚本在Linux上工作,但在MacOS上不工作)。无论如何,我已经编辑了我的答案,并给了您一个示例(感谢Docker),向您展示了它在Linux主机上的工作原理。您能否尝试一点一点地运行该命令(首先是
join
,然后是
sort
,然后是
awk
)以查看该命令的哪一部分在您的计算机上出现故障?
House1   dog    blue
House2   cat    yellow
House3   bird   red
House4   cow   orange
House5   duck   black 
House6   cow    brown
dog     1
cat     2
cow     3
duck    4
bird    5 
House1   1  blue
House2   2  yellow
House3   5   red
House4   3  orange
House5   4   black 
House6   3   brown
docker run --rm -v $(pwd):/tmp -w /tmp debian:buster ./join.sh
House1  1       blue
House2  2       yellow
House3  5       red
House4  3       orange
House5  4       black
House6  3       brown