Основная идея, глядя на столбец 4, заключается в том, что вы используете данные столбца в качестве индекса для associative array
/ hash
счетчиков:
awk '{i[$4]++; print $4 "_" i[$4]}' gene
И для сохранения других данных ...:
awk '{i[$4]++; c4 = $4 "_" i[$4]; gsub($4, c4);print;}' #and optionally >outFile
Если вы не готовы переписать файл на месте, я не думаю, что стандартный awk поддерживает это:
perl -i~ -ape 'if (!($F[3] =~ /_\d+$/)) { $i{$F[3]}++; $c4 = "$F[3]_$i{$F[3]}"; s/$F[3]/\Q$c4/}' gene
Это обрабатывает gene
и создаетgene~
файл резервной копии.Perl также не будет обрабатывать один и тот же файл дважды (если он видит _
и число в конце столбца 4, пропускает строку)
Предупреждение: если имя вашего гена существует в строках 1-3, ваш вывод будет сломан.Тем не менее, на основании ваших данных выборки выглядит маловероятным.