Awk: longueur de record

dim -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

Je possede un fichier composé de +/- 10000 records dont la longueur est variable.
Je voudrais fixer ces longueurs à 4000 blocs.
Pourriez vous me donner la synthaxe a suivre avec awk?

Merci d'avance
Configuration: Windows XP
Firefox 2.0.0.7

12 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    si la commande que je t'ai donné avec perl ça ne marche pas alors je n'ai pas compris la question
    si seulement le résultat compte et pas la méthode et le fichier n'est pas confidentiel, je te propose de mettre le fichier sur cjoint.com
    0
  2. dim
     
    Salut Lami20j,

    Le prob est que ce sont des données financieres, et donc a caractere privé.

    Ne pourrais tu pas m'aider avec awk ? length ?

    Merci d'avance
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    awk je ne connais pas

    essaie
    cat fichier| perl -ne 'print join "\n",unpack("A4000" x (length($_)/4000), $_)' > resultat
    --
    lami20j
    0
  4. dim
     
    je viens d'executer,

    il separe bien les records "idem dd"

    mais complete pas les records pour en faire des lignes de 4000 blocs.

    As tu une autre idée awk ou sed ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    mais complete pas les records pour en faire des lignes de 4000 blocs.

    alors j'avoue que je ne comprends pas ta question

    Je te propose de créer un fichier avec des lignes de 7caractères et de le transformer en 3 blocs pour voir ce que tu cherches
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    c'est quoi une ligne de 4000 blocs ?
    peut-être que : awk '{printf("%4000s\n", $0)}'
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    moi j'ai compris qu'il faut mettre un \n après chaque 4000 caractère
    alors c'est ça que fait les commandes que j'ai donné
    et je pense que la tienne aussi
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ou alors 4000 en tout : awk '{printf("%3999s\n", $0)}'
    0
  10. dim
     
    Ouf j'ai trouvé et grace a toi

    voici la commande qui realise la transformation correcte:

    dd if=file_in cbs=4000 conv=unblock | awk '{printf("%4000s\n", $0)}' > file_out

    oui je sais un dd pipé avec un awk c'est pas trop propre mais ca marche ;-)

    Mille merci
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    moi j'ai compris qu'il faut mettre un \n après chaque 4000 caractère
    c'est bien ça?
    0
  12. dim
     
    il faut donc mettre un CR en fin de ligne mais forcer toutes les lignes a 4000 blocs.

    Merci
    0
  13. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    écoute il y a 2 caractères à prendr en consideration
    CR
    LF
    et ensuite
    CRLF

    si tu veux avec CR alors c'est \r
    si tu veux avec LF c'est \n
    si tu veux avec CRLF alors c'est \r\n

    ce qui veut dire que les commandes
    cat fichier| perl -ne 'print join "\n",unpack("A4000" x (length($_)/4000), $_)' > resultat_n
    cat fichier| perl -ne 'print join "\r",unpack("A4000" x (length($_)/4000), $_)' > resultat_r
    cat fichier| perl -ne 'print join "\r\n",unpack("A4000" x (length($_)/4000), $_)' > resultat_rn

    doivent fonctionner selon les besoins
    0