Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何用另一个文件的值替换一个文件的值?_Bash_File_Awk - Fatal编程技术网

Bash 如何用另一个文件的值替换一个文件的值?

Bash 如何用另一个文件的值替换一个文件的值?,bash,file,awk,Bash,File,Awk,我解释我的问题: 我有两个文件,一个看起来像这样(它是一个.tsv文件,每行的列数不一定相同): 每行以otuxxx开头,该id始终位于第一列 另一个文件是带有3列的.tsv文件: OTU3978 UniRef90_A0A010P3Z8 0.846 OTU0006 UniRef90_A0A010P3Z8 0.855 OTU4929 UniRef90_A0A010P3Z8 0.829 OTU4317 UniRef90_A0A011P550 0.85 OTU4816 UniRef90_A0A011P

我解释我的问题:

我有两个文件,一个看起来像这样(它是一个.tsv文件,每行的列数不一定相同):

每行以otuxxx开头,该id始终位于第一列

另一个文件是带有3列的.tsv文件:

OTU3978 UniRef90_A0A010P3Z8 0.846
OTU0006 UniRef90_A0A010P3Z8 0.855
OTU4929 UniRef90_A0A010P3Z8 0.829
OTU4317 UniRef90_A0A011P550 0.85
OTU4816 UniRef90_A0A011P550 0.807
OTU3902 UniRef90_A0A011QPQ2 0.836
OTU3339 UniRef90_A0A011RKI6 0.835
OTU1359 UniRef90_A0A011RLA7 0.801
OTU2085 UniRef90_A0A011RLA7 0.843
OTU3542 UniRef90_A0A011RLA7 0.866
我想用第一个文件的第二列替换第二个文件中的每个
OTUXXX
。例如,它应该给出(对于第二个文件的第二行):

OTU0006UniRef90_A010P3Z8 0.855
它变成:

Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured UniRef90_A0A010P3Z8 0.855
在bash中可能吗

编辑:

我可以用它来替换这些列

awk 'FNR==NR{a[NR]=$2;next}{$1=a[FNR]}1' f1 f2

但它不是“自动”的,文件1的第一行将与文件2的第一行匹配。。。根据
OTUXXX

的值没有变化,您已经非常接近了。您可以使用此
awk

awk 'NR == FNR {a[$1] = $2; next} $1 in a{$1 = a[$1]} 1' f1 f2


你试过了吗?实际上,我可以用
awk'FNR==NR{a[NR]=2;next}{$1=a[FNR]}1'f1 f2来替换这些列。但它不是“自动”的,文件1的第一行将与文件2的第一行匹配。。。根据“OTUXXX”的值没有变化……请将此
awk
代码作为您的尝试发布在您的问题中,以便更容易理解您试图实现的目标以及问题所在。
awk 'NR == FNR {a[$1] = $2; next} $1 in a{$1 = a[$1]} 1' f1 f2
OTU3978 UniRef90_A0A010P3Z8 0.846
Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured UniRef90_A0A010P3Z8 0.855
OTU4929 UniRef90_A0A010P3Z8 0.829
OTU4317 UniRef90_A0A011P550 0.85
OTU4816 UniRef90_A0A011P550 0.807
OTU3902 UniRef90_A0A011QPQ2 0.836
OTU3339 UniRef90_A0A011RKI6 0.835
OTU1359 UniRef90_A0A011RLA7 0.801
OTU2085 UniRef90_A0A011RLA7 0.843
OTU3542 UniRef90_A0A011RLA7 0.866