Localizar / substituir IDs repetidos em CSV
O regex não totalmente otimizado, mas funcional que usei foi:
(GO:[\d]+),(GO:[\d]+)(.*)
substituindo por:
$1$3\n$2$3
Dando a saída:
ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,
Observe que isso não duplica a vírgula em sua saída desejada, pois achei que poderia ser um efeito colateral, em vez do desejado.
Se a vírgula duplicada for desejada, use:
$1,$3\n$2$3
como substituto.
Explicação
(GO:[\d]+) - primeiro grupo de captura, correspondência literal "GO:" seguido por um ou mais dígitos ( $1 )
, - corresponde à vírgula literal (usada para detectar IDs repetidos / ignorar os não repetidos)
(GO:[\d]+) - 2º grupo de captura, igual ao primeiro! ( $2 )
(.*) - 3º grupo de captura, correspondência de 0 ou mais de "qualquer coisa" - abreviação de "resto da linha" aqui ( $3 )
$1$3\n$2$3 - print id 1 seguido por resto da linha; então uma nova linha; print id 2 seguido pelo restante da linha
Advertência
Esteja ciente de que, para que a expressão regular acima funcione, você deve ter a opção de pesquisa . matches newline desativada. Caso contrário, o terceiro grupo de captura corresponderá muito.