GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar varias líneas aleatorias de un archivo de texto usando Sed?

Quiero eliminar 10 líneas aleatorias de un archivo de texto que tiene 90 líneas y luego enviarlo a un nuevo archivo. He estado tratando de hacer esto usando sed, pero tengo dos problemas. Estoy usando:

sed -i $((1 + RANDOM & 90))d input.txt > output.txt

y luego ejecutar el comando 10 veces (¡supongo que hay una mejor manera de hacer esto!)

El primer problema que tengo es que me sale el error:

sed:-e expresión #1, carácter 2:uso no válido de la dirección de línea 0

Supongo que esto tiene algo que ver con el hecho de que es posible que ya haya eliminado la línea 1 y lo esté intentando de nuevo.

El segundo problema es que a veces no se escribe nada en el archivo de salida, aunque funcionaba antes de usar el mismo comando.

Respuesta aceptada:

Probablemente querías usar RANDOM % 90 en lugar de & . De ahí provienen los ceros (eliminar la línea 1 está bien, en la próxima ejecución, las líneas se numerarán 1 .. 89).

Sin embargo, hay un problema:la fórmula podría generar el mismo número varias veces. Para evitar eso, usa un enfoque diferente:baraja los números y elige los primeros diez:

shuf -i1-90 -n10 | sed 's/$/d/' | sed -f- input > output

Si no te gusta sed generando un sed secuencia de comandos, puede usar printf , también:

sed -f <( printf %dd;  $(shuf -i1-90 -n10) ) input > output

Linux
  1. Eliminar ocurrencias de cadena en archivo de texto

  2. Eliminar líneas vacías usando sed

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

  4. ¿Cómo inserto texto en la primera línea de un archivo usando sed?

  5. ¿Cómo mostrar ciertas líneas de un archivo de texto en Linux?

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

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Cómo eliminar varias líneas en Vim

Tutorial de Unix Sed:eliminar líneas de archivos usando direcciones y patrones

Tutorial de Unix Sed:Cómo escribir en un archivo usando Sed

Cómo eliminar el texto seleccionado en el editor vi