#unix #awk
#unix #awk
Вопрос:
Мне действительно нужна ваша помощь, чтобы объединить два файла (с 3 столбцами) на основе $ 1 $ 2 и получить все значения в $ 3 и заменить пустой / пустой на 0. Заранее большое спасибо
файл1:
chr1 1000001 135
chr2 1000002 57
chr2 4400002 117
chr6 1000003 172
файл2:
chr1 1000001 377
chr1 5500002 320
chr6 1000003 432
Желаемый результат:
chr1 1000001 135 377
chr1 5500002 0 320
chr2 1000002 57 0
chr2 4400002 117 0
chr6 1000003 172 432
Я пробовал
awk -F't' 'NR==FNR{A[$1$2]=$3; next} {A[$1$2]; B[$1$2]=$3} END{for (id in A) print id,A[id],B[id], "0"}' OFS='t' File1 File2
Вывод
chr1 1000001 135
chr1 1000001 377
chr1 5500002 320
chr2 1000002 57
chr2 4400002 117
chr6 1000003 172
chr6 1000003 432
Ответ №1:
Не могли бы вы, пожалуйста, попробовать следующее, написанное и протестированное с показанными примерами только в GNU awk
.
awk '
FNR==NR{
a[$1 OFS $2]=$NF
next
}
{
if(($1 OFS $2) in a){
d[$1 OFS $2]
$(NF 1)=a[$1 OFS $2]
}
else{
$(NF 1)=0
}
print
}
END{
for(i in a){
if(!(i in d)){
print i,"0",a[i]
}
}
}
' Input_file2 Input_file1 | sort -k1
Вывод будет следующим.
chr1 1000001 135 377
chr1 5500002 0 320
chr2 1000002 57 0
chr2 4400002 117 0
chr6 1000003 172 432