我有2个文件;我想将文件 A 中的 NA 替换为文件 B 中的列。
File A
ENSG00000134539 131.178876666595 8.17899671725794 0.855069805781827 9.56529708095531 1.12E-21 1.74E-20 KLRD1
ENSG00000135250 1133.42737699143 -1.12767591222818 0.117927787197502 -9.56242747385385 1.15E-21 1.78E-20 SRPK2
ENSG00000214870 103.556102419252 -2.15426846253205 0.225384371016956 -9.55819808095733 1.20E-21 1.86E-20 NA
ENSG00000136153 249.119544948009 -1.32395826295328 0.138571556732024 -9.55432914356018 1.24E-21 1.93E-20 LMO7
File B
ENSG00000214870 AC004540.5 103.556102419252
ENSG00000267121 CTD-2020K17.1 231.295616750853
ENSG00000254733 RP11-317J19.1 53.0097117074116
我想匹配第一列上的文件 A 和文件 B,并将文件 A 最后一列中的 NA 替换为文件 B 中的第二列。
我尝试了很多方法,但由于我是 Linux 新手,我无法完成它。
awk 'NR==FNR{A[$1]++;next} B[$7]==A[$2]' file1 file2
awk 'NR==FNR{ if (A[$1] in B[$1]) B[$7]==A[$2]}' file1 file2
我的命令有什么问题吗?
答案1
尝试这个:
awk 'NR==FNR{a[$1]=$2; next} ($1 in a) && $NF=="NA"{$NF=a[$1]} 1' f2 f1
a[$1]=$2
使用第一列作为键并将第二列数据保存为值($1 in a) && $NF=="NA"
检查第一列是否是数组中的键a
以及最后一列是否是NA
$NF=a[$1]
将最后一列更改为a
数组中保存的值
1
打印输入记录内容f2 f1
请注意输入文件的顺序。第二个文件后跟第一个文件