[bash] Ajouter des colonnes à un fichier
Résolu
tibofx
Messages postés
14
Statut
Membre
-
tibofx Messages postés 14 Statut Membre -
tibofx Messages postés 14 Statut Membre -
Bonjour,
J'ai un fichier à nombre de colonnes variable, et une dizaine de miliers de lignes. Je voudrais pouvoir "compléter" les colonnes par des zéros pour qu'elles aient toutes la même taille, soit 400. Si cela est trop complexe à réaliser, je peux me satisfaire au pire de remplacer, sachant que j'ai au moins 385 colonnes, toutes les colonnes à partir de 385 jusqu'à 400 par des zéros.
Exemple :
... 0 3 6 1 0 (colonne 400)
... 0 0
... 2 1 8
et je veux :
... 0 3 6 1 0
... 0 0 0 0 0
... 2 1 8 0 0
Quelqu'un aurait-il une idée ??? Merci !
Tibo.
J'ai un fichier à nombre de colonnes variable, et une dizaine de miliers de lignes. Je voudrais pouvoir "compléter" les colonnes par des zéros pour qu'elles aient toutes la même taille, soit 400. Si cela est trop complexe à réaliser, je peux me satisfaire au pire de remplacer, sachant que j'ai au moins 385 colonnes, toutes les colonnes à partir de 385 jusqu'à 400 par des zéros.
Exemple :
... 0 3 6 1 0 (colonne 400)
... 0 0
... 2 1 8
et je veux :
... 0 3 6 1 0
... 0 0 0 0 0
... 2 1 8 0 0
Quelqu'un aurait-il une idée ??? Merci !
Tibo.
A voir également:
- [bash] Ajouter des colonnes à un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Comment faire des colonnes sur word - Guide
8 réponses
Salut,
Si toutes les colonnes ne comportent qu'un seul caractère, tu peux essayer ça :
Un petit exemple :
Si toutes les colonnes ne comportent qu'un seul caractère, tu peux essayer ça :
sed -e ':boucle;s/^.\{1,800\}$/& 0/; t boucle' fichierSi c'est concluant, tu peux soit redirigé la sortie (> fichier.sortie), soit si tu as une version de GNU sed 4.0 ou supérieure utiliser le switch "-i".
Un petit exemple :
$ cat plop
1 2 3 4 5 6 7 8 9
1 5 6 3
2 5 9 7 8
2 6 0 1 1 5
9 5 1
$ sed -e ':boucle;s/^.\{1,20\}$/& 0/; t boucle' plop
1 2 3 4 5 6 7 8 9 0 0
1 5 6 3 0 0 0 0 0 0 0
2 5 9 7 8 0 0 0 0 0 0
2 6 0 1 1 5 0 0 0 0 0
9 5 1 0 0 0 0 0 0 0 0;-))
Salut, et merci pour ta réponse ! En effet ça me fait bien l'effet que tu me décris, mais le probleme est que je voudrais le faire seulement une ligne sur deux, car avant chacune de ces lignes de nombres, j'ai un en-tête sur une ligne. Donc je m'y replonge !
Essaye ça alors :
$ cat plop
1er en-tête
1 2 3 4 5 6 7 8 9
2ème en-tête
1 5 6 3
3ème en-tête
2 5 9 7 8
4ème en-tête
2 6 0 1 1 5
5ème en-tête
9 5 1
$ sed -e '2~2 {:boucle;s/^.\{1,20\}$/& 0/; t boucle}' plop
1er en-tête
1 2 3 4 5 6 7 8 9 0 0
2ème en-tête
1 5 6 3 0 0 0 0 0 0 0
3ème en-tête
2 5 9 7 8 0 0 0 0 0 0
4ème en-tête
2 6 0 1 1 5 0 0 0 0 0
5ème en-tête
9 5 1 0 0 0 0 0 0 0 0;-))
En fait ça me fait des choses bizarres cette affaire, exemple :
#Input 1
0 0 0 0 1 0 0 0 0 0 2
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#Input 2 0 0 0 0 0 0 0
0 2 0 0 1 0 0
#Output 2 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Donc en gros ça me rajoute une fois sur deux des zeros aux en-têtes !! Merci quand même pour ta réponse, maintenant je vais plutot chercher, à partir de ta première solution, les en-têtes (qui sont dc maintenant de la forme #Input 2 0 0 0 0 0 0 ) et les remplacer par les en-têtes normaux (#Input x ou #Output x)
#Input 1
0 0 0 0 1 0 0 0 0 0 2
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#Input 2 0 0 0 0 0 0 0
0 2 0 0 1 0 0
#Output 2 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Donc en gros ça me rajoute une fois sur deux des zeros aux en-têtes !! Merci quand même pour ta réponse, maintenant je vais plutot chercher, à partir de ta première solution, les en-têtes (qui sont dc maintenant de la forme #Input 2 0 0 0 0 0 0 ) et les remplacer par les en-têtes normaux (#Input x ou #Output x)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si l'en-tête ne commence pas par un chiffre mais par tout autre caractère, alors il vaut mieux cette syntaxe :
sed -e '/^[0-9]/ {:boucle;s/^.\{1,20\}$/& 0/; t boucle}';-))
Ah merci bien !!! Juste un détail encore que je suis entrain d'essayer de régler, c'est que je ne voulais pas toucher aux chiffres qui suivent mes "Output x", et seulement mes "Input x"... J'y retourne j'y retourne, mais merci beaucoup tes réponses sont toujours rapides claires et efficaces c'est génial !
$ cat bar
#Input 1
0 0 0 0 1 0 0 0 0 0 2
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0
#Input 1
0 0 0 0 1 0 0 0 0 0 2
#Output 1
1 0 0 0 0 0 0 0 0
#Input 1
0 0 0 0 1 0 0 0 0 0 2
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0
$ sed -e '/^#Input/ {n; :boucle;s/^.\{1,30\}$/& 0/; t boucle}' bar
#Input 1
0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0
#Input 1
0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0
#Output 1
1 0 0 0 0 0 0 0 0
#Input 1
0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0
#Output 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0;-))