Unix 如何有条件地将一个文件中的列替换为另一个文件中的列?

Unix 如何有条件地将一个文件中的列替换为另一个文件中的列?,unix,awk,sed,Unix,Awk,Sed,文件1以以下内容开头: 1 1 1 3 2 4 1 5 1 6 1 7 1 10 1 13 1 15 1 17 0 MET 1 0 GLN 2 0 VAL 3 0 ILE 4 0 LEU 5 0 LEU 6 0 ASP 7 0 LYS 8 0 VAL 9 0 ALA 10 文件2以以下内容开头: 1 1 1 3 2 4 1 5 1 6 1 7 1 10 1 13 1 15 1 17 0 MET 1 0 GLN 2 0 VAL 3 0 ILE 4 0

文件1以以下内容开头:

 1 1
 1 3
 2 4
 1 5
 1 6
 1 7
 1 10
 1 13
 1 15
 1 17
0 MET 1
0 GLN 2
0 VAL 3
0 ILE 4
0 LEU 5
0 LEU 6
0 ASP 7
0 LYS 8
0 VAL 9
0 ALA 10
文件2以以下内容开头:

 1 1
 1 3
 2 4
 1 5
 1 6
 1 7
 1 10
 1 13
 1 15
 1 17
0 MET 1
0 GLN 2
0 VAL 3
0 ILE 4
0 LEU 5
0 LEU 6
0 ASP 7
0 LYS 8
0 VAL 9
0 ALA 10
我想用File1中的列1替换File2中的列1,前提是File1中的列2作为File2中的列3存在于中

因此,我的预期结果是:

1 MET 1
0 GLN 2
1 VAL 3
2 ILE 4
1 LEU 5
1 LEU 6
1 ASP 7
0 LYS 8
0 VAL 9
1 ALA 10
不管有没有sed,我一直在尝试awk,但都没有成功。我知道有一个简单的答案。使用循环对我也不起作用

提前谢谢

试试看

这样测试

akshay@Aix:/tmp$ cat f1
 1 1
 1 3
 2 4
 1 5
 1 6
 1 7
 1 10
 1 13
 1 15
 1 17


akshay@Aix:/tmp$ cat f2
0 MET 1
0 GLN 2
0 VAL 3
0 ILE 4
0 LEU 5
0 LEU 6
0 ASP 7
0 LYS 8
0 VAL 9
0 ALA 10


akshay@Aix:/tmp$ awk 'FNR==NR{A[$2]=$1;next}{$1 = ( $3 in A ) ? A[$3] : 0}1' f1 f2
1 MET 1
0 GLN 2
1 VAL 3
2 ILE 4
1 LEU 5
1 LEU 6
1 ASP 7
0 LYS 8
0 VAL 9
1 ALA 10

啊,很抱歉我没有尝试in@NicholasKovacs“仅当文件1中的第2列与文件2中的第3列一样存在时”这句话对我来说没有意义,您能更好地解释一下您的要求吗?此外,在您的示例输出中,我在第4行的第一列中看到一个“2”,但在文件1中,我在相应的位置看到一个“1”。查看Akshay的答案,我明白您的意思,很抱歉打扰您。感谢您的查看!我的帖子不清楚,我以后一定会澄清这是完美的,谢谢!其中有几个结构我不知道如何使用,但现在我明白它们的作用了。@NicholasKovacs很高兴知道它帮助了你。