Commande \c et equivalent

Résolu
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 !

5 réponses

  1. Contributeur
    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" :)
    2. Contributeur
      Sur quel système es-tu ?
      Quelle version de sed ?
    3. la station tourne sous XP SP3... çà aide? :o
    4. Contributeur
      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
    5. Contributeur
      Pas mieux que dubcek, merci au passage ;-)
  2. Contributeur
    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/
      1. ne marche pas pour l'écriture dans des fichiers
    2. 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
      ...
      1. Çà 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é!