Découper une très longue ligne en plusieurs

kalifi Messages postés 11 Statut Membre -  
kalifi Messages postés 11 Statut Membre -
Bonjour,
j'ai un très très long fichier contenant une seule ligne de plus de 5 millions de valeurs
0.55971931 0.5113123 0.51621799 0.65333583 0.5352019 0.42886304 0.5883952 0.57659072 0.65463236 0.48981324 0.52246554 0.4432738 0.55416584 0.43427686 0.54144264 0.73262018 0.52734922 0.49281018 0.64068342 0.48989701 ...............................................
(1L, 5024860C)

je souhaite le découper une plusieurs lignes de 255 colonnes.

d'avance merci

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,
    je souhaite le découper une plusieurs lignes de 255 colonnes.
    J'avoue n'avoir pas tout compris là ;-\

    Plusieurs lignes ?
    Plusieurs colonnes ?
    Ou les deux ?
    1
    1. kalifi Messages postés 11 Statut Membre
       
      Salut,
      départ : (ce que j'ai) une seule ligne (avec plusieurs valeurs comme ceci)
      0.55971931 0.5113123 0.51621799 0.65333583 0.5352019 ..etc. (1L x 5024860C)

      arrivée (ce que je souhaite avoir) ( n Lignes x 255 C colonnes ou valeurs)

      merci
      0
      1. UnGnU Messages postés 1468 Statut Contributeur 158 > kalifi Messages postés 11 Statut Membre
         
        Salut,

        As-tu regardé la commande "fold" donnée plus bas par Char Snipeur ???
        Elle semble toute indiquée pour ce que tu veux faire.

        Sinon
        sed -r 's/.{250}/&\n/g' fichier
        devrait faire le boulot.
        0
      2. Utilisateur anonyme > UnGnU Messages postés 1468 Statut Contributeur
         
        le monsieur veut des lignes de 255 "mots" (colonnes, ou champs) en considérant l'espace comme séparateur.
        0
      3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Utilisateur anonyme
         
        Hi,

        Qu'à cela ne tienne…
        sed -r 's/([^ ]* ){255}/&\n/g' fichier
        ;-)
        0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Il doit y avoir un truc simple, mais là, je l'ai pas... probablement avec awk.
    Sinon, on peut le faire à la bourrin.
    On commence par compter le nombre de caractères :
    nb=$(wc -c fichier)
    ensuite, une bonne boucle :
    for (( i=0 ; i< nb/255 ; i+=1 ))
    do
    (( a=i*255+1 ))
    (( b=a+254 ))
    cut -c $a-$b fichier >> resu
    done

    Je n'ai pas testé, mais tu vois l'idée ?
    0
    1. Utilisateur anonyme
       
      for i in $(< fichier); do ((++n%255)) && fmt=' ' || fmt='\n'; rslt="$rslt$i$fmt"; done
      echo -e "$rslt"
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      trouver purement par hasard : fold - wrap each input line to fit in specified width
      Voilà, me doutait bien qu'il existait une commande simple
      0
    3. Utilisateur anonyme
       
      fold
      "découpe" en fonction du nombre de colonnes, mais une colonne telle que la conçoit le terminal, c'est-à-dire ± un caractère. :(
      0
  3. kalifi Messages postés 11 Statut Membre
     
    ça a marché avec :

    sed -r 's/.{2805}/&\n/g' input.txt > output.txt

    2805 le nombre d'espaces.

    mon fichier input :
    MotEspaceMotEspace ......Mot
    taille du Mot : 10 Espaces

    Merci à tous.
    0
    1. Utilisateur anonyme
       
      taille du mot : 10 caractères.

      tu pourrais donc, alors, utiliser
      fold
      avec 255*11-1, soit 255 fois (10 caractères + 1 espace) - 1 espace
      ...
      ?
      0
    2. kalifi Messages postés 11 Statut Membre
       
      je viens de l'essayer ça marche également avec fold :

      fold -w 2805 input.txt > output.txt
      0