Comment utiliser awk ou sed pour convertir des lignes en colonnes

J'ai besoin de transposer un file.

Fichier d'input:

1/1/1111 1 2 3 4 2/2/2222 5 6 7 8 

Sortie:

 1/1/1111 1 2 3 4 2/2/2222 5 6 7 8 

Avec sed :

 $ sed -e ' :1 $!N /\n$/{ P d } s/\n/ / t1 ' <file 

En perl

 perl -lp00e 's/\n/ /g' your_file 

Explication

  • l : Supprime le séparateur d'loggings d'input de l'logging en cours de traitement et ajoute le séparateur d'loggings de sortie en cours (une nouvelle ligne par défaut) après chaque ligne imprimée.
  • -p : Opère l'logging du file par logging et imprime l'logging en cours après le traitement.
  • -00 : Signifie que le séparateur d'loggings est deux lignes consécutives ou plus
  • -e : exécute la string suivante en tant que code tout en définissant la variable par défaut ( $_ ) sur l'logging en cours de lecture à partir du file.
  • s/\n/ /g : Remplacer chaque nouvelle ligne rencontrée dans l'logging en cours par un espace (le modificateur g garantit que le rlocation est "global").

Avec awk :

 awk '{ORS=" ";}; !NF{ORS="\n"};1' file 

La variable ORS spécifie le séparateur d'loggings de sortie . Si le nombre de champs est zéro (la ligne est vide), le séparateur d'loggings doit être une nouvelle ligne, sinon un espace. Le 1 à la fin signifie simplement une condition positive, donc awk imprime toute la ligne.

sont-ils tous du même format, soit 6 lignes pour chaque bloc? si c'est le cas, paste est le plus simple (c'est-à-dire 6 tirets):

 paste - - - - - - < file 

Si vous avez besoin d'espaces plutôt que d'tabs, ajoutez -d' '

Qu'en est-il de xargs

  xargs -n5 < input_file 

ou awk

 awk '{a=(NR%6==0)?"":a$0" ";if(NR%6==5)print a}' inp