0

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

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

因此,对于类似的情况,如果 file1 的 $1 = file2 的 $7,将 file1 的 $1 替换为 file2 的 $2,我通常会使用:

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 

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

4

1 回答 1

2

这个单线会做:

awk 'NR==FNR{a[$2]=$1;b[$2]=$4;next}$2 in a{$1=a[$2];$4=b[$2]}7' f2 f1
于 2013-11-11T14:06:41.333 回答