#awk
#awk
Вопрос:
У меня file1.gz
это выглядит так
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC
Мне нужно сравнить $1,$2
плюс каждую букву в каждом другом столбце в file1
( $1,$2,letter 1 of $4
, then $1,$2, letter 2 of $4
, then $1,$2,letter 1 of $6
, then $1,$2,letter 2 of $6
и так далее) с $1,$2,$5
file2
приведенным ниже.
chromo position major minor ref anc knownEM nInd
NC_044998.1 4013 T G T T 0.000000 1
NC_044998.1 4016 G T G G 0.000000 1
NC_044998.1 4018 T A T T 0.000000 1
NC_044998.1 4019 G A G G 0.000000 1
NC_044998.1 3760 G A G G 0.000000 1
Если есть совпадение, добавьте « ref
«, еще добавьте « dev
«. Результат каждого сравнения может быть добавлен к последнему столбцу, как показано в выводе ниже.
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT ref ref dev dev ref ref ref ref ref ref
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT dev dev dev dev dev dev ref ref dev dev
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT ref ref ref dev ref ref ref ref ref ref
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC dev dev dev dev dev dev dev dev dev dev
Пытался решить в два этапа
Разделение каждого другого столбца
awk 'BEGIN {FS = OFS = "t"} {for (i=4; i<=12; i =2) {sub(/./,"amp;t",$i)1;} print $0};' file1
А затем пытаюсь адаптировать ответ к аналогичной проблеме, с которой я недавно столкнулся
| awk 'BEGIN {FS=OFS="t"} FNR==NR {a[$1,$2,$5]; next} FNR==1 { next } {for (i=4; i<=12; i =3) {print $0, (($1,$2,$4) in a ? "ref":"dev"), (($1,$2,$i 1 ) in a ? "ref":"dev")}}' file2 -
Он не возвращает никаких выходных данных
Ответ №1:
Вы можете использовать это awk
:
awk 'BEGIN {
FS=OFS="t"
}
FNR == NR {
map[$1,$2] = $5
next
}
($1,$2) in map {
for (i=4; i<=NF; i =2)
for (j=1; j<=2; j)
$0 = $0 " " (substr($i,j,1) == map[$1,$2] ? "ref" : "dev")
} 1' file2 file1
NC_044998.1 4013 0 TT 2 GG 0 TT 0 TT 0 TT ref ref dev dev ref ref ref ref ref ref
NC_044998.1 4016 0 TT 0 TT 0 TT 2 GG 0 TT dev dev dev dev dev dev ref ref dev dev
NC_044998.1 4017 0 TT 0 TT 0 TT 0 TT 0 TT
NC_044998.1 4018 0 TT 0 TA 0 TT 0 TT 0 TT ref ref ref dev ref ref ref ref ref ref
NC_044998.1 4019 2 CC 2 CC 2 CC 2 CC 2 CC dev dev dev dev dev dev dev dev dev dev
Комментарии:
1. Спасибо! эти дни действительно были для меня почти что awk bootcamp!