GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminar líneas pares o impares de un archivo de texto

Esto podría funcionar para usted (tanto GNU como no GNU sed):

 sed -n 'p;n' file # keep odd
 sed -n 'n;p' file # keep even

-n :suprimir impresión

p :imprime la línea actual

n :línea siguiente


Usando GNU sed:

sed -i '0~2d' filename

para eliminar las líneas pares del archivo.

Para eliminar líneas impares:

sed -i '1~2d' filename

El -i La opción haría que los cambios se guardaran en el archivo en el lugar.

Citando del manual:

`FIRST~STEP'
     This GNU extension matches every STEPth line starting with line
     FIRST.  In particular, lines will be selected when there exists a
     non-negative N such that the current line-number equals FIRST + (N
     * STEP).  Thus, to select the odd-numbered lines, one would use
     `1~2'; to pick every third line starting with the second, `2~3'
     would be used; to pick every fifth line starting with the tenth,
     use `10~5'; and `50~0' is just an obscure way of saying `50'.

wow

Los % es un operador de módulo y NR es el número de línea actual, entonces NR%2==0 es cierto solo para líneas pares e invocará la regla predeterminada para ellas ({ print $0 } ). Por lo tanto, para guardar solo las líneas pares , redirige la salida desde awk a un nuevo archivo:

awk 'NR%2==0' infile > outfile

sed

Puedes lograr lo mismo con sed . devnulls respuesta muestra cómo hacerlo con GNU sed .Abajo hay alternativas para las versiones de sed que no tienen el ~ operador:

mantener líneas impares

sed 'n; d' infile > outfile

mantener líneas uniformes

sed '1d; n; d' infile > outfile

Linux
  1. ¿Cómo eliminar líneas duplicadas dentro de un archivo de texto?

  2. ¿Cómo eliminar líneas en blanco de un archivo (incluidos tabuladores y espacios)?

  3. ¿Cómo eliminar "datos binarios" de un archivo de texto (por ejemplo, Bash_history)?

  4. Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

  5. Eliminar líneas vacías en un archivo de texto a través de grep

Cómo quitar líneas de un archivo usando el comando Sed

Cómo quitar todos los caracteres de espacio en blanco de un archivo de texto

Eliminar ocurrencias de cadena en archivo de texto

Comando de shell para eliminar los caracteres ^M del archivo de texto

Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

Eliminar las primeras N líneas de un archivo de registro activo