Commande \c et equivalent

Résolu
symone -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. symone
       
      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
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Sur quel système es-tu ?
      Quelle version de sed ?
      0
    3. symone
       
      la station tourne sous XP SP3... çà aide? :o
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      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
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Pas mieux que dubcek, merci au passage ;-)
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    utiliser printf
    $ v1="a"; v2="bc"; v3="def" 
    $ printf "%-8s" $v1 $v2 $v3; echo x
    a bc def x
    $
    1
  3. symone
     
    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
    1. symone
       
      ne marche pas pour l'écriture dans des fichiers
      0
  4. symone
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. symone
     
    Çà 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