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. Çà 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é!
    1. 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. Contributeur
        hello
        utiliser printf
        $ v1="a"; v2="bc"; v3="def" 
        $ printf "%-8s" $v1 $v2 $v3; echo x
        a bc def x
        $
        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. 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