如果两个ID
列匹配,我正在寻找替换文件中的列的方法。
我有档案A.txt
c a b ID
1 0.01 5 1
2 0.1 6 2
3 2 3
和档案B.txt
ID a b
1 10 15
2 20 16
3 30 12
4 40 14
我正在寻找的输出是
档案A.txt
ID a b
1 0.01 5
2 0.1 6
3 30 2
我可以使用awk找到两个文件中的ID
列匹配
awk 'NR==FNR{a[$1];next}$1 in a' B.txt A.txt
但是如何添加替换品。感谢您的任何建议。
答案 0 :(得分:0)
awk 解决方案:
awk 'NR==FNR{ if(NR>1) a[$1]=$2; next }
FNR>1 && $1 in a && NF<3{ f=$2; $2=a[$1]; $3=f }1' B.txt A.txt | column -t
if(NR>1) a[$1]=$2;
- 捕获文件B.txt
中的列值,但标题行(N>1
)
FNR>1 && $1 in a && NF<3
- 如果ID
匹配并且A.txt
中的某些行少于3个字段
输出:
ID a b
1 0.01 5
2 0.1 6
3 30 2
答案 1 :(得分:0)
适应您的新数据格式
awk '
# Load file b reference
FNR==NR && NR > 1 {ColB[$1]=$2; next}
# treat file A
{
# set missing field if know in file B (and not 1st line)
if ( NF < 4 && ( $NF in ColB) && FNR > 1) $0 = $NF FS ColB[$NF] FS $2
# print result (in any case)
print
}
#order of file is mandatory' B.txt A.txt
自我记录。 假设这只是样本中缺少的第二个字段