Awk 根据文件B中的查找/替换条件,查找并替换文件A中列中的值
我有两个文件。第一个是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终端进行 另外,为了将来参考,是否有任何一行程序可以从给定文件的单个列中提取唯一值列表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已全部更改为数字
提前感谢您的帮助 下面的操作应该可以完成(
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