Commande \c et equivalent

Résolu/Fermé
symone - 16 déc. 2013 à 11:16
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Non membre Dernière intervention 5 avril 2025 - 18 déc. 2013 à 10:40
Bonjour le forum,

J'ai actuellement un petit soucie quand j'écris dans un fichier...
au cour du script, j'ai une boucle avec l'instruction comme suit :

echo "$myvar \c" >> myfile.txt
"\c" permettant de continuer d'écrire sur la même ligne.

myfile.txt est un tableau. Le problème étant que $myvar fait dans 90% des cas 8 caractères et, dans 10% des cas, myvar fait plus de 8 caractères et décale toute la ligne de mon tableau !
Comme "\c" insère 4 espaces, je pensais jouer dessus pour redécaler le tableau mais ... je sais pas comment faire :)

Quelqu'un aurait une solution? surtout qu'insérer un ensemble d'espaces n'est pas facile en shell, il n'en prend qu'un à chaque fois donc là, je sèche...

Merci beaucoup !

A voir également:

5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
16 déc. 2013 à 11:43
Salut,

Pourquoi ne pas reformater ton fichier une fois fini ?

$ cat brol 
12345678 12345678 12345678 12345678
12345678 12345678 12345678 12345678
12345678 12345678910 12345678
12345678 12345678910 12345678 12345678910 12345678
12345678 12345678 12345678

$ sed 's/\s\+/\t/g' brol
12345678 12345678 12345678 12345678
12345678 12345678 12345678 12345678
12345678 12345678910 12345678
12345678 12345678910 12345678 12345678910 12345678
12345678 12345678 12345678
--
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot. <('')
1
Parce que je n'y avais pas pensé du tout =)

par contre, il doit y avoir un problème : il me laisse le décallage et me remplace tous les "s" par des "t" :)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
16 déc. 2013 à 18:02
Sur quel système es-tu ?
Quelle version de sed ?
0
la station tourne sous XP SP3... çà aide? :o
0
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Non membre Dernière intervention 5 avril 2025 5 630
17 déc. 2013 à 11:19
ca fonctionne sous XP SP3 avec des "
C:> sed "s/\s\+/\t/g"  fichier
12345678 12345678 12345678 12345678
12345678 12345678 12345678 12345678
12345678 12345678910 12345678
12345678 12345678910 12345678 12345678910 12345678
12345678 12345678 12345678
C:> sed --version
GNU sed version 4.2.1
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
17 déc. 2013 à 11:42
Pas mieux que dubcek, merci au passage ;-)
0
dubcek Messages postés 18778 Date d'inscription lundi 15 janvier 2007 Statut Non membre Dernière intervention 5 avril 2025 5 630
16 déc. 2013 à 12:44
hello
utiliser printf
$ v1="a"; v2="bc"; v3="def" 
$ printf "%-8s" $v1 $v2 $v3; echo x
a bc def x
$
1
sans vouloir faire de contre pub à CCM, j'ai trouvé ceci pour continuer mes recherches...

http://www.developpez.net/forums/d246814/systemes/linux/shell-commandes-gnu/plusieurs-echo-meme-ligne/
0
ne marche pas pour l'écriture dans des fichiers
0
Enfait il s'agit d'un script qu'un collègue a écrit (que j'essaie aujourd'hui de corriger) et je retrouve en effet quelque chose comme
| awk '{printf("%7.1f"), $3}'
mais l'argument change d'un cas à l'autre :
%7.1f
ou
%5d
ou encore
%8s
comme dubcek a proposé... je pense ducoup adopter sa proposition :) par contre je ne vois pas du tout comment l'adapter et ce que change les
f
,
d
et
s
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Çà y est j'ai réussi! J'ai utilisé la 1ère solution de dubcek ; avec un printf ...

echo "$MyVar  \c" | awk '{printf("%17s"), $1}' >> MyFile.txt

le
%-8s
était insuffisant car, dès que ma chaîne faisait plus de 8 caractères, il y avait un décalage dans ma ligne, c'est pour çà que j'utilise
%17s
, pour garder une belle marge :)

Pour ceux qui rament autant que moi, le lien suivant énonce tous ces arguments :

http://www.quennec.fr/gnulinux/programmation-shell-sous-gnulinux/le-langage-de-programmation-awk/la-fonction-printf

Merci à dubcek et zipe31 pour avoir animé le sujet et pour m'avoir dépatouillé!
0