如果file1的B列= file2的B列,则将A列file1替换为file2的A列

时间:2013-11-11 13:50:43

标签: linux awk

我有两个不同长度的文件,file2是一个大的参考文件,我从文件1中提取数据。

我有一行awk,我通常会在我的文件中调查并替换它,但它总是在同一列中找到并替换。

所以对于类似的东西,如果file1的$ 1 = file2的$ 7,用file2的$ 2替换$ 1的file1,我通常会使用:

awk 'FNR==NR{a[$7]=$2;next}a[$1]{$1=a[$1]}1' file2 file1 > newfile

但是,我正在尝试一种编码方式:

如果file1的$ 2 = file2的$ 2,则将$ 1 file1替换为file2的$ 1。

但是在上面的代码中,我不知道哪个$ 1指的是“find”,哪个$ 1指的是“replace”。

file1看起来像

0   rs58108140  0   0   G   A   
0   rs189107123 0   0   C   G
0   rs180734498 0   0   C   T

file2看起来像

1   rs58108140  0   10583   G   A   1:10583
1   rs189107123     0   10611   C   G   1:10611
1   rs180734498     0   13302   C   T   1:13302

所需的输出将是:

1   rs58108140  0   10583   G   A
1   rs189107123     0   10611   C   G
1   rs180734498     0   13302   C   T 

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

这个单行会做:

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