Мне нужна ваша помощь с awk.Я пытаюсь найти строки, в которых столбцы $1
и $2
дублированы в файле и где хотя бы один из дубликатов имеет значение ref
в столбце $3
.Если это так, выведите "1"
else print "2"
в новом столбце.
Примером входного файла будет:
a 123 exp_a
a 123 ref
b 146 exp_a
c 156 ref
d 205 exp_a
d 205 exp_b
, а выходным файлом будет:
a 123 exp_a 1
a 123 ref 1
b 146 exp_a 2
c 156 ref 2
d 205 exp_a 2
d 205 exp_b 2
Здесь a 123
дублируется одной строкой, имеющей ref
в $3
, поэтому он получает 1
.Напротив, остальные либо не дублируются в $1
и $2
, либо дублируются, но без ref
в $3
, поэтому они получают 2
.
После некоторого возни, яудается поместить 1
в строки, где дублируются $1
и $2
, но это не учитывает ref
в $3
, и я не могу сказать awk для печати 2
в противном случае ... СПОЙЛЕРЫ: мой код, вероятно, очень уродлив.
awk 'BEGIN {FS=OFS="\t"} {i=$1FS$2} {a[i]=!a[i]?$3:a[i]FS"1\n" i"\t"$3FS"1"} END {for (l in a) {print l,a[l]}}' infile > outfile
Вывод, который я получаю:
d 205 exp_a 1
d 205 exp_b 1
a 123 exp_a 1
a 123 ref 1
b 146 exp_a
c 156 ref