Awk: longueur de record
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
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
-
ModérateurSalut,
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 -
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 -
Modérateurawk je ne connais pas
essaiecat fichier| perl -ne 'print join "\n",unpack("A4000" x (length($_)/4000), $_)' > resultat--
lami20j -
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 ? -
Modérateurmais 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 -
Contributeurc'est quoi une ligne de 4000 blocs ?
peut-être que : awk '{printf("%4000s\n", $0)}' -
Modérateurmoi 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 -
Contributeurou alors 4000 en tout : awk '{printf("%3999s\n", $0)}'
-
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 -
Modérateurmoi j'ai compris qu'il faut mettre un \n après chaque 4000 caractère
c'est bien ça? -
il faut donc mettre un CR en fin de ligne mais forcer toutes les lignes a 4000 blocs.
Merci -
Modérateuré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 commandescat 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