Eliminar columnas cuando la línea coincide con una condición -- regex campo con bash campo con awk campo con sed campo con pattern-matching camp Relacionados El problema

Remove columns when line matches a condition


0
vote

problema

Español

Estoy tratando de eliminar ciertas columnas de un archivo de texto en líneas que coinciden con una cadena, pero luego dejan el resto de las líneas intactas.

Di que tengo un archivo (miles de líneas en realidad)

  10 12 a USA John TGCAGG USA John TGCATG 5 2 b CAN Tom TGCACG CAN Tom TGCAAC ....   

y quiero crear un nuevo archivo que elimine la segunda columna en líneas que contengan TGCA, pero deja todas las demás líneas intactas. Me gustaría ver:

  10 12 a USA TGCAGG USA TGCATG 5 2 b CAN TGCACG CAN TGCAAC   

Puedo modificar qué columnas imprimen en las líneas que coinciden con el uso de una regulación para comenzar AWK o SED, pero no puedo obtener las otras líneas (que no se modifican) para imprimir, o para preservar el orden de esas líneas.

¿Necesito usar una declaración de IF en AWK? Intenté usar Siguiente pero no creo que tenga ese derecho.

Original en ingles

I am trying to remov certain columns from a text file on lines that match a string, but then leave the rest of the lines untouched.

Say I have a file (thousand of lines in reality)

10 12 a USA John TGCAGG USA John TGCATG 5 2 b CAN Tom TGCACG CAN Tom TGCAAC .... 

And I want to create a new file that removes the 2nd column in lines that contain TGCA but leaves all other lines intact. I would like to see:

10 12 a USA TGCAGG USA TGCATG 5 2 b CAN TGCACG CAN TGCAAC 

I can modify which columns print on lines that match using a regexp to start awk or sed, but I cant get the other lines (which are not modified) to print, or to preserve the order of those lines.

Do I need to use an if statement in awk? Tried using next but I dont think I have that right.

              

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Yo diría:

  w9  

Es decir: cuando la línea contiene c10 , reemplace la segunda columna con la 3ª y disminuya el número de campos. Es decir, retire la segunda columna.

 

I would say:

$ awk '/TGCA/ {$2=$3; NF--} 1' file 10 12 a USA TGCAGG USA TGCATG 5 2 b CAN TGCACG CAN TGCAAC 

That is: when the line contains TGCA, replace the 2nd column with the 3rd and decrease the number of fields. That is, remove the 2nd column.

 
 
         
         
2
 
vote

con gnu sed:

  c11  

Esto se elimina de líneas que contienen c12 la primera aparición de uno o más espacios seguido de cualquier número de no espacios, que es la segunda columna y el (los) espacio (s) que lo preceden. < / p>

Para BSD SED, esto tiene que ser modificado porque no entiende c13 o c14 (o c15 - es un poco doloroso). En ese caso,

  c16  

hace lo mismo.

 

With GNU sed:

sed '/TGCA/ s/\s\+\S*//' filename 

This removes from lines that contain TGCA the first occurrence of one or more spaces followed by any number of non-spaces -- which is the second column and the space(s) preceding it.

For BSD sed, this has to be amended because it doesn't understand \s or \S (or \+ -- it is a bit painful). In that case,

sed '/TGCA/ s/[[:space:]]\{1,\}[^[:space:]]*//' filename 

does the same.

 
 

Relacionados problema

1  Cómo afirmar dos mapas en las pruebas de controlador de Phoenix con un patrón de coincidencia  ( How to assert two maps in phoenix controller testing with pattern matching ) 
En mis pruebas de controlador de Phoenix, estoy haciendo algo como esto, describe "update/2" do setup [:create_user] test "Edits, and responds with the...

2  Bash Scripting: ¿Cómo cambio el nombre de los archivos para eliminar los caracteres numéricos al principio?  ( Bash scripting how do i rename files to remove numeric characters at the begin ) 
mv comando no acepta un patrón que coincide como grep! ¿Cuál es la buena manera de manejar esto y un tipo de operaciones similar? ...

4  Reemplace el soporte cuadrado usando PowerShell  ( Replace square bracket using powershell ) 
Si tiene un nombre de archivo como "Minutos del comité [octubre de 2010] - HQ.DOC", ¿cómo obtiene PowerShell para reemplazar los corchetes? Lo siguiente no fu...

1  ¿Puedo usar tipos abstractos en la coincidencia de clases de casos?  ( Can i use abstract types in matching of case classes ) 
O, en otras palabras: ¿Puedo verificar con coincidir si los elementos en una tupla son de la misma clase de caso, a pesar de tener valores diferentes en sus c...

1  Patrón de regex para que coincida con una cadena  ( Regex pattern to match a string ) 
Estoy buscando un patrón regex que coincida con una cadena. Una cadena, definida como cualquier cosa en las cotizaciones. Lo que estoy tratando de hacer es an...

3  ¿Cómo coincidir para una opción con campos múltiples?  ( How to match for an option with multiple fields ) 
¿Cómo igualo a una opción con múltiples campos? Tengo el siguiente código: let opt_windowrecv = glfw_context.create_window(1280, 720, "Hello World!", glfw:...

0  Patrón de búsqueda grep  ( Pattern searching grep ) 
Sé que hay muchas respuestas, pero aún no voy a encontrar una que responda a mi pregunta: ¡Ojalá alguien pueda ayudar! Tengo un archivo de configuración q...

4  Regex solo coincide después de una cierta cadena  ( Regex only match after a certain string ) 
Espero igualar múltiples nombres dentro de un documento, pero solo coinciden con los nombres después de una cierta cadena. Por ejemplo, el documento: Nomb...

0  Añadir un caracteres nulos a una tupla en regex  ( Add a null caracter to a tuple in regex ) 
Tengo este patrón w+=([ws]+.*?)[,]] Guardado en [ https://regex101.com/r/ui3uhd/1] [Enlace] y quiero capturar también el caracterismo nulo para poner en ...

0  Números de coincidencia condicional de la cadena  ( Conditionally matching numbers from string ) 
Tengo una cadena de números formados de lo mismo: 24_1_1_1_1_1_12_1_1_13_1_1 subrayece ser espacios Necesito tomar 3 números. El primer número en es...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos