GNU/Linux >> Linux Esercitazione >  >> Linux

Modificare l'ordine delle righe in un file

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

Ovvero, p stampa la riga corrente, ottieni il n ext uno, h vecchio, prendi il n ext uno, G et la linea trattenuta (aggiungilo allo spazio del modello) e p stampa lo spazio del modello a 2 righe con la terza e la seconda riga scambiate.


Usando awk e numeri interi:

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

L'operatore modulo esegue la divisione intera e restituisce il resto, quindi per ogni riga restituirà la sequenza 1, 2, 0, 1, 2, 0 [...]. Sapendo questo, salviamo l'input sulle righe in cui il modulo è 2 per dopo -- vale a dire, subito dopo aver stampato l'input quando è zero.


Un altro awk approccio:

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

L'output:

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 - estratti successivi 2 record se esistono

  • ogni 2° e 3° record sono assegnati a L2 e L3 variabili rispettivamente


Linux
  1. Ordine di reindirizzamento?

  2. Come scorrere le righe di un file?

  3. Stampa linee tra (e inclusi) due motivi?

  4. Contare le righe in un file?

  5. Come modificare l'autorizzazione su un singolo file?

Come modificare il memory_limit nel file .htaccess

Come stampare righe duplicate in un file di testo in Linux

5 modi per contare il numero di righe in un file

Come ottenere solo il numero di righe di un file

Come modificare la configurazione di u-boot in Yocto

Come modificare le impostazioni predefinite Stampa su file...