Короткийawkподход:
awk '{ $3=$3"_"a[$3]++ }1' file
Приблизительный вывод:
val1 val2 text_0_0
val1 val2 text_0_1
val1 val2 text_0_2
...
val1 val2 text_1_0
val1 val2 text_1_1
val1 val2 text_1_2
...
val1 val2 text_2_0
val1 val2 text_2_1
val1 val2 text_2_2
a[$3]++
-подсчет появления 3-го значения поля с помощью приращения поста -(<var>++
)Попробуйте сделать так:
cat... | sed -n '/^>/ { s/.*description: *//; s/\[.*//; p; }'
(Не проверено, так как я на мобильном телефоне.)
Есть более изящные способы; например, цикл Awk был бы наиболее гибким.
Использованиеawk
:
awk -F ':' '/^>/ { sub(".*", "", $10)
sub(" \\[.*", "", $11)
print $10, $11 }' file.fa
Данные, которые вы хотите извлечь, — это первое слово в 10-м поле и все до [
в 11-м поле каждой строки заголовка, если поля разделены :
-.
Код удаляет все, начиная с первого пробела в 10-м поле и все после [
в 11-м поле (, включая [
и предыдущий пробел ).
Затем распечатываются модифицированные 10-е и 11-е поля.
Вывод с учетом данных в вопросе:
TRBD1 T cell receptor beta diversity 1
TRDD2 T cell receptor delta diversity 2