gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:42:39 27 4
gpt4 key购买 nike

我有两个不同长度的文件,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,则将 file1 的 $1 替换为 file2 的 $1。

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

文件1看起来像

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

文件2看起来像

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

在此先感谢您提供的任何帮助。

最佳答案

这条单线可以做到:

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

关于linux - 如果 file1 的 B 列 = file2 的 B 列,则将 file1 的 A 列替换为 file2 的 A 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com