
У меня есть входной файл, подобный этому, в котором есть повторяющиеся значения. Я хочу присвоить уникальный идентификатор каждому уникальному значению на основе первого столбца (col1). Минимум повторяющихся строк имеют одинаковый идентификатор перед десятичной точкой на основе повторяющегося значения col1. Любая помощь, ребята, заранее спасибо.
Ca3CNSNP431180 2428 2435 0 TTTATttt AT-Hook 1
Ca3CNSNP431179 2429 2437 0 TTATTttat AT-Hook 1
Ca3CNSNP431178 2428 2436 0 TTTATttta AT-Hook 1
Ca4CNSNP431177 1384 1388 0 ATTGA NF-YB;NF-YA;NF-YC 1
Ca4CNSNP431176 1382 1386 0 AGATT Myb/SANT;MYB;ARR-B 1
Ca4CNSNP431175 1382 1386 0 AGATT GATA;tify 1
Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
желаемый результат:
identifier col1 col2 col3 col4 col5 col6 col7
000001.1 Ca3CNSNP431180 2428 2435 0 TTTATttt AT-Hook 1
000002.1 Ca3CNSNP431179 2429 2437 0 TTATTttat AT-Hook 1
000003.1 Ca3CNSNP431178 2428 2436 0 TTTATttta AT-Hook 1
000004.1 Ca4CNSNP431177 1384 1388 0 ATTGA NF-YB;NF-YA;NF-YC 1
000005.1 Ca4CNSNP431176 1382 1386 0 AGATT Myb/SANT;MYB;ARR-B 1
000006.1 Ca4CNSNP431175 1382 1386 0 AGATT GATA;tify 1
000007.1 Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
000007.2 Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
000008.1 Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
000008.2 Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
000009.1 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
000009.2 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
000009.3 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
решение1
Короткийawk
решение:
awk '{ printf "%06d.%d\t%s\n",(!a[$1]++? ++c:c),a[$1],$0 }' file
!a[$1]++
- проверка уникальности значения 1-го поля$1
(используется как индекс для массиваa
)++c
-c
этопрефиксзначение увеличивается для каждой уникальной записи (до десятичной точки)a[$1]
-суффиксзначение (после десятичной точки) - указывает на количество вхождений значения 1-го поля$1
%06d.%d
- спецификатор выходного формата, где%06d
указывает на размерцелая частьчислаd
(размер 6 с ведущими нулями06
) и.%d
-шкалачисла (дробная часть)
Выход:
000001.1 Ca3CNSNP431180 2428 2435 0 TTTATttt AT-Hook 1
000002.1 Ca3CNSNP431179 2429 2437 0 TTATTttat AT-Hook 1
000003.1 Ca3CNSNP431178 2428 2436 0 TTTATttta AT-Hook 1
000004.1 Ca4CNSNP431177 1384 1388 0 ATTGA NF-YB;NF-YA;NF-YC 1
000005.1 Ca4CNSNP431176 1382 1386 0 AGATT Myb/SANT;MYB;ARR-B 1
000006.1 Ca4CNSNP431175 1382 1386 0 AGATT GATA;tify 1
000007.1 Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
000007.2 Ca4CNSNP431174 1386 1398 0 tgaAATTTtcatt TCR;CPP 2
000008.1 Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
000008.2 Ca4CNSNP431172 1383 1395 0 gattgAAATTttc TCR;CPP 2
000009.1 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
000009.2 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3
000009.3 Ca3CNSNP430205 3334 3343 0 tATATAtata AT-Hook 3