我有两个文件:
input1
22 rs145072688 14431347 C G 0.3418 0.648 0.830 0.516 0.506 0.497 0.785 0.586
22 rs201725126 14432618 G A 0.8119 1.571 1.748 1.661 1.384 1.374 1.614 1.718
22 rs200579949 14433624 G A 0.8598 1.590 1.669 1.763 1.754 1.832 1.627 1.250
22 rs75454623 14433659 C A 0.7888 1.564 1.606 1.667 1.355 1.619 1.692 1.775
22 rs199856693 14433758 G A 0.9354 1.807 1.936 1.906 1.847 1.929 1.734 1.327
22 rs9604721 14434713 C T 0.9723 1.984 1.984 1.984 1.984 1.984 1.878 1.412
input2
rs145072688:10352:T:TA rs145072688
rs201725126:13116:T:G rs201725126
rs200579949:13118:A:G rs200579949
rs75454623:14930:A:G rs75454623
rs199856693:14933:G:A rs199856693
所需的输出:
22 rs145072688:10352:T:TA 14431347 C G 0.3418 0.648 0.830 0.516 0.506 0.497 0.785 0.586
22 rs201725126:13116:T:G 14432618 G A 0.8119 1.571 1.748 1.661 1.384 1.374 1.614 1.718
22 rs200579949:13118:A:G 14433624 G A 0.8598 1.590 1.669 1.763 1.754 1.832 1.627 1.250
22 rs75454623:14930:A:G 14433659 C A 0.7888 1.564 1.606 1.667 1.355 1.619 1.692 1.775
22 rs199856693:14933:G:A 14433758 G A 0.9354 1.807 1.936 1.906 1.847 1.929 1.734 1.327
22 rs9604721 14434713 C T 0.9723 1.984 1.984 1.984 1.984 1.984 1.878 1.412
因此,如果两个文件的第二列都匹配,我想用输入2中第一列中的值替换文件input1中第二列中的值。
我尝试过:
awk 'FNR==NR{a[$1]=$2;next} $2 in a{$2=a[$1]}1' input2 input1
还有这个
awk 'FNR==NR { F2[$2]=$2 ; next } $2 in F2 {$1 = F2[$1] ; print } ' input2 input1
答案 0 :(得分:0)
您的第一次尝试几乎是正确的。
awk '
FNR==NR { a[$2]=$1; next }
$2 in a { $2=a[$2] }
1
' input2 input1
$2 in a
在a的键中查找$ 2,而不是在其值中查找a
的键