Script awk : extraction de données

Résolu/Fermé
bouna - 17 août 2010 à 13:22
 bouna - 18 août 2010 à 14:53
Bonjour,

je souhaite avoir un scripte sh qui fait l'extraction de données dans un fichier fich1 contenant plusieurs enregistrementspour contituer le fichier fich2
le fichier fich1 contient:
- un entete et un pied de page
- et plusieurs lignes contenant 849 caracteres chacune.
le scripte doit extraire les données de la meme ligne aux positions:
- 31 à 50
- 353 à 364
- 364 à 372
- 372 à 377
- 470 à 500
puis separe ces champs par un par '|'

merci de m'aider pour ce script


A voir également:

2 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
17 août 2010 à 15:56
hello
il ne faut traiter qu'une ligne ou toutes les lignes de 849 caractères ?
LIGNE contient le No de la ligne à traiter
LIGNE=x
$ awk -v L=$LIGNE 'NR==L {print substr($0,31,20) "|" substr($0,353,12) "|" substr($0,364,9) "|" substr($0,372,6) "|" substr($0,470,31)}' fich1 > fich2
$
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 août 2010 à 16:07
Salut,

J'ai demandé si awk est obligatoire, puisque pour ce genre de traitement je préfère sed par exemple.
0
il faudra traiter tous les lignes, je m'explique:
cat fich:

1 ----------------------------- ceci est l'entete du fichier ------------------------------------
2 00CH39078 NOYAU PARIS KJHU89374 Y 83909937 - UYTEG ** UEY
3 00CH69385 TRAITRD JAPON GUH93845 N 73897838 - ZEGGH ** HHU
4
.........................................................................................................
.........................................................................................................
n -------------------------------- (n-2)ceci est la fin du fichier -------------------------------


- ici la longueur de la ligne est fixé a 60 caracteres (mon fichier reel 848 caracteres)
- le nombre de ligne est mentionné a la fin ligne a la position 36 et s'ecrie sur trois caractere '999' .
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
18 août 2010 à 12:43
le nombre de ligne est mentionné a la fin ligne a la position 36 et s'ecrie sur trois caractere '999'
la position 36 de la dernière ligne donne le nombre de lignes à traiter ?
0
non, mais l'ensemble de mes scriptes sont sous awk.
as tu une proposition? avec plaisir
0
oui c'est le nombre de ligne a traiter
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 août 2010 à 14:10
0
bjr lami, ce cas est un fichier de longueur indefinie et n'insere pas le caracter | entre les champs.
merci de maider !!!
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
17 août 2010 à 15:30
Re,

Quelque soit la ligne tu dois extraire toujours au même endroit?
awk c'est obligatoire?
Un exemple de quelques lignes de ton fichier sera mieux.
0