Tengo un archivo que tiene tres columnas. La columna 3 contiene nombres de genes y se ve así:
Rv0729,Rv0993,Rv1408
Rv0162c,Rv0761c,Rv1862,Rv3086
Rv2790c
¿Cómo puedo imprimir el número de genes en cada fila?
text-processing
Saisha
fuente
fuente
Rv*
patrón en cualquier lugar de la línea, no solo en una columna en particular. Así que solo notaré que si realmente tiene otros datos en el archivo, no presentados en la pregunta aquí, es posible que deba modificar las soluciones en consecuencia. (O aclarar la pregunta.)Respuestas:
Simplemente desea agregar una columna con el recuento de columnas en ella. Esto se puede hacer usando
awk
:NF
es unaawk
variable que contiene el número de campos (columnas) en el registro actual (fila). Imprimimos este número seguido de una coma y el resto de la fila, para cada fila.Una alternativa (el mismo resultado, pero puede parecer un poco más limpio):
FS
es el separador de campo que seawk
usa para dividir cada registro en campos, y lo configuramos como una coma-F ','
en la línea de comando (como en la primera solución).OFS
es el separador de campo de salida , y configuramos que sea el mismo queFS
antes de leer la primera línea de entrada.fuente
Si desea contar el número de apariciones del
Rv[0-9]{4}c?
patrón en lugar del número de campos delimitados por comas como sugiere el tema de su pregunta, puede hacer lo siguiente:fuente
Un enfoque de Perl:
Las
-a
marcas seperl
comportan comoawk
y dividen cada línea de entrada en la cadena dada por-F
y guardan los campos resultantes en la matriz@F
. Por lo tanto,$#F
será el índice de matriz más alto@F
y, dado que las matrices comienzan a contar en0
,$#F+1
será el número total de elementos en la matriz. El-p
medio "imprime cada línea de entrada después de aplicar la secuencia de comandos dada por-e
. Els///
es el operador de sustitución y aquí reemplazamos el comienzo de la línea (^
) con el número de campos + 1 y una coma ($#F+1 . ","
).fuente
Su pregunta establece que la columna 3 contiene nombres de genes. Supongo que su entrada real es la siguiente:
Cada nombre de gen en la columna 3 contiene una
Rv
subcadena principal . Por lo tanto, podemos contarlos en Python así:La lista resultante muestra el recuento de genes en cada línea, en su orden respectivo. Si queremos hacerlo más detallado e incluir la posibilidad de que los genes no contengan la cadena "Rv" (pero supongamos que column3 es una cadena de valores separados por comas), también podemos hacer lo siguiente:
Prueba de funcionamiento:
fuente