File1以:
开头 1 1
1 3
2 4
1 5
1 6
1 7
1 10
1 13
1 15
1 17
File2以:
开头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
我希望将File2中的第1列替换为File1中的第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,我没有得到它的工作。我知道有一个简单的答案。使用循环对我来说也没有用。
提前致谢!
答案 0 :(得分:1)
<强> 尝试 强>
awk 'FNR==NR{A[$2]=$1;next}{$1 = ( $3 in A ) ? A[$3] : 0}1' file1 file2
经过测试
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