Eu tenho um arquivo que tem três colunas. A coluna 3 contém nomes de genes e é assim:
Rv0729,Rv0993,Rv1408
Rv0162c,Rv0761c,Rv1862,Rv3086
Rv2790c
Como posso imprimir o número de genes em cada linha?
text-processing
Saisha
fonte
fonte
Rv*
padrão em qualquer lugar da linha, não apenas em uma coluna específica. Portanto, observarei que, se você realmente tiver outros dados no arquivo, não apresentados na pergunta aqui, pode ser necessário modificar as soluções adequadamente. (Ou esclarecer a questão.)Respostas:
Você simplesmente deseja adicionar uma coluna com a contagem de colunas nela. Isso pode ser feito usando
awk
:NF
é umaawk
variável que contém o número de campos (colunas) no registro atual (linha). Imprimimos esse número seguido de uma vírgula e o restante da linha, para cada linha.Uma alternativa (mesmo resultado, mas pode parecer um pouco mais limpo):
FS
é o separador de camposawk
usado para dividir cada registro em campos e o definimos como vírgula-F ','
na linha de comando (como na primeira solução).OFS
é o separador do campo de saída e definimos o mesmo paraFS
antes da leitura da primeira linha de entrada.fonte
Se você deseja contar o número de ocorrências do
Rv[0-9]{4}c?
padrão em oposição ao número de campos delimitados por vírgula, conforme sugere o assunto da sua pergunta, você pode:fonte
Uma abordagem Perl:
As
-a
marcasperl
se comportam comoawk
e dividem cada linha de entrada na string fornecida por-F
e salve os campos resultantes na matriz@F
. Portanto,$#F
será o índice mais alto da matriz@F
e, como as matrizes começam a contar em0
,$#F+1
será o número total de elementos na matriz. Os-p
meios "imprimem todas as linhas de entrada após a aplicação do script fornecido por-e
. Os///
operador de substituição e aqui estão substituindo o início da linha (^
) pelo número de campos + 1 e vírgula ($#F+1 . ","
).fonte
Sua pergunta afirma que a coluna 3 contém nomes de genes. Presumo que sua entrada real seja a seguinte:
Cada nome de gene na coluna3 contém
Rv
substring principal . Assim, podemos contá-los em python da seguinte forma:A lista resultante mostra a contagem de genes em cada linha, em sua respectiva ordem. Se queremos torná-lo mais detalhado e incluir a possibilidade de que os genes não contenham a cadeia "Rv" (mas mantenha a suposição de que a coluna3 é uma cadeia de valor separada por vírgula), também podemos fazer o seguinte:
Execução de teste:
fonte