GNU/Linux >> Tutoriales Linux >  >> Linux

Cambiar el orden de las líneas en un archivo

$ seq 9 | sed -n 'p;n;h;n;G;p'
1
3
2
4
6
5
7
9
8

Es decir, p imprima la línea actual, obtenga el n ext uno, h viejo, obtén el n ext uno, G et la línea sostenida (agréguela al espacio del patrón) y p imprime ese espacio de patrón de 2 líneas con la tercera y la segunda línea intercambiadas.


Usando awk y matemáticas enteras:

awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay; delay=""} END { if(length(delay) != 0 ) { print delay } }' /path/to/input

El operador de módulo realiza la división de enteros y devuelve el resto, por lo que para cada línea devolverá la secuencia 1, 2, 0, 1, 2, 0 [...]. Sabiendo eso, simplemente guardamos la entrada en las líneas donde el módulo es 2 para más tarde, es decir, justo después de imprimir la entrada cuando es cero.


Otro wow enfoque:

awk '{print $0; if ((getline L2)>0 && (getline L3)>0){ print L3 ORS L2 }}' file

La salida:

gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
  • (getline L2)>0 && (getline L3)>0 - extrae el siguiente 2 registros si existen

  • cada segundo y tercer registro se asignan a L2 y L3 variables respectivamente


Linux
  1. Cómo cambiar el límite de memoria en el archivo .htaccess

  2. ¿Cómo recorrer las líneas de un archivo?

  3. ¿Imprimir el contenido del archivo sin la primera y la última línea?

  4. ¿Contar líneas en un archivo?

  5. ¿Cómo cambiar el permiso en un solo archivo?

Cómo imprimir líneas duplicadas en un archivo de texto en Linux

5 formas de contar el número de líneas en un archivo

Imprimir la última línea de un archivo, desde la CLI

Establecer/cambiar el atributo ctime o Change time en un archivo

Cómo obtener solo el número de líneas de un archivo

Cómo cambiar la configuración predeterminada de Imprimir a archivo...