GNU/Linux >> Tutoriels Linux >  >> Linux

Changer l'ordre des lignes dans un fichier

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

C'est-à-dire p imprimer la ligne courante, obtenir le n poste un, h vieux, obtenez le n poste un, G et la ligne tenue (ajoutez-la à l'espace du motif) et p imprimez cet espace de modèle de 2 lignes avec les troisième et deuxième lignes permutées.


Utilisation de awk et les nombres entiers :

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'opérateur de module effectue une division entière et renvoie le reste, donc pour chaque ligne, il renverra la séquence 1, 2, 0, 1, 2, 0 [...]. Sachant cela, nous enregistrons simplement l'entrée sur les lignes où le module est 2 pour plus tard - à savoir, juste après avoir imprimé l'entrée lorsqu'elle est à zéro.


Un autre maladroit approche :

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

La sortie :

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 - extraits suivant 2 enregistrements s'ils existent

  • chaque 2ème et 3ème enregistrements sont affectés à L2 et L3 variables respectivement


Linux
  1. Imprimer des lignes entre (et y compris) deux motifs ?

  2. Modifier les autorisations d'un fichier

  3. Imprimer la dernière ligne d'un fichier, à partir de la CLI

  4. Comment utiliser les lignes d'un fichier comme arguments d'une commande ?

  5. Comment changer la config de u-boot dans Yocto

Comment imprimer des lignes dupliquées dans un fichier texte sous Linux

5 façons de compter le nombre de lignes dans un fichier

Définition/modification de l'attribut ctime ou Change time sur un fichier

Comment obtenir uniquement le nombre de lignes d'un fichier

Comment modifier les paramètres par défaut d'impression dans un fichier...

Comment changer l'encodage utilisé par mon serveur SFTP ?