Shell - Convertir une colonne en plusieurs
Jiboule
-
Jiboule -
Jiboule -
Bonjour,
J'ai un problème assez simple je pense, mais je ne trouve pas de solution :
Comment faire pour passer d'un fichier contenant ça :
à un fichier contenant ça :
Je vous remercie et vous souhaite une bonne journée.
J'ai un problème assez simple je pense, mais je ne trouve pas de solution :
Comment faire pour passer d'un fichier contenant ça :
1 2 2 3 3 3 4 4 4 4
à un fichier contenant ça :
1 2 3 4
2 3 4
3 4
4
Je vous remercie et vous souhaite une bonne journée.
A voir également:
- Shell - Convertir une colonne en plusieurs
- Déplacer une colonne excel - Guide
- Classic shell - Télécharger - Personnalisation
- Trier une colonne excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
J'essaie de bien comprendre ta solution, mais elle est sympa !
Par contre, l'exemple que je donnais n'est pas vraiment celui que je souhaite utiliser, mais plutot un colonne de plusieurs blocs de différentes valeurs et de différentes tailles, du genre :
Que je souhaite mettre comme ceci :
Perso je pensais, séparer mon premier fichier en n fichiers, n étant le nombre de blocs, avec le même nombre de lignes (bien que mes blocs soit de tailles différentes => ajouter des blancs), et après lisant chaque fichier ligne par ligne, essayer de regrouper chaque ligne. Mais comme je travaille avec des fichiers de près de plusieurs milliers de lignes, ça risque de prendre un peu de temps.
C'est bien pourquoi j'avais préviendu ;-))
Sinon, jette un oeil à cette astuce dans la FAQ :
Transformer des colonnes en lignes dans un fichier...
Voici finalement ce que j'ai fait :
$ cat script_colonne2colonnes.sh rm test.txt # tail +2 : 2 premiers blocs sur la même colonne cat plop | grep -n ^$ | sed -e "s/\(.*\):/\1/" | tail +2 > nb_blanc.dat un=1 nom=1 while read line; do deux=$(echo $line) deux=$(($deux-1)) sed -n "${un},${deux}p" plop > $nom.dat un=$(($deux+2)) nom=$(($nom+1)) done < nb_blanc.dat # 2.dat est le plus gros bloc max=$(wc -l 2.dat | sed -e "s/\(.*\)[[:space:]].*/\1/") max=$(($max+1)) for((i=1; i<$max; i++)); do un=$(sed -n "$i"p 1.dat) deux=$(sed -n "$i"p 2.dat) trois=$(sed -n "$i"p 3.dat) quatre=$(sed -n "$i"p 4.dat) cinq=$(sed -n "$i"p 5.dat) six=$(sed -n "$i"p 6.dat) sept=$(sed -n "$i"p 7.dat) echo $deux $trois $quatre $cinq $six $sept $un >> test.txt done # Je veux que / sépare chaque nombre cat test.txt | sed -e "s/[[:space:]]/\//g" > inter.txt mv inter.txt plopC'est surement pas optimisé (ça prend 30s avec des blocs de 1000 lignes), mais ça marche.
Avez vous mieux ?
Bonne journée !