我有两个不同长度的文件,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
提前感谢您提供的任何帮助。
答案 0 :(得分:2)
这个单行会做:
awk 'NR==FNR{a[$2]=$1;b[$2]=$4;next}$2 in a{$1=a[$2];$4=b[$2]}7' f2 f1