Shell formatage fichier
Résolu
Ndiaye
-
ndiaye -
ndiaye -
Bonjour,
Bonjour,
J'ai de gros soucie pour formater mon fichier en utlisant un script shell:
Mon fichier de depart est :
cat fich 1:
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
je souhaite avoir le resultat suivant:
- la longueur de chaque enregitremant du fichier formaté ne doit pas depaser 200 caracteres.
- suivant les cas (030,050) inserer dans l'enr les information (001 AZERTY) ou (050 QUERTY)
Select Case
Case "030"
vProd = "001"
vLGrp = "AZERTY"
Case "050"
vProd = "003"
vLGrp = "QUERTY"
Case Else
fichier apres formatage
cat fich2:
0000000000001CH5 85884769370 DN17052010 2000000017 010000 AZERTY1206N0YSAINT LOUIS ** 001 001800Mr. MOUSSA SARR 01061982
0000000000002CH5 08235367539 DN17052010 2000000017 010000 QUERTY1301N0YLOUGA ** 003 002900Mr. BASSIROU DILLO 13081967
ceci est un exemple mais le format est beaucoups complexe.
je souhaite le script soit tres explicite et commente pour que je puisse l'adapter.
Bonjour,
J'ai de gros soucie pour formater mon fichier en utlisant un script shell:
Mon fichier de depart est :
cat fich 1:
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
je souhaite avoir le resultat suivant:
- la longueur de chaque enregitremant du fichier formaté ne doit pas depaser 200 caracteres.
- suivant les cas (030,050) inserer dans l'enr les information (001 AZERTY) ou (050 QUERTY)
Select Case
Case "030"
vProd = "001"
vLGrp = "AZERTY"
Case "050"
vProd = "003"
vLGrp = "QUERTY"
Case Else
fichier apres formatage
cat fich2:
0000000000001CH5 85884769370 DN17052010 2000000017 010000 AZERTY1206N0YSAINT LOUIS ** 001 001800Mr. MOUSSA SARR 01061982
0000000000002CH5 08235367539 DN17052010 2000000017 010000 QUERTY1301N0YLOUGA ** 003 002900Mr. BASSIROU DILLO 13081967
ceci est un exemple mais le format est beaucoups complexe.
je souhaite le script soit tres explicite et commente pour que je puisse l'adapter.
A voir également:
- Shell formatage fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Classic shell - Télécharger - Personnalisation
4 réponses
hello
il faudrait expliquer comment tu passes de
il faudrait expliquer comment tu passes de
cat fich 1: 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010| 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010| à cat fich2: 0000000000001CH5 85884769370 DN17052010 2000000017 010000 AZERTY1206N0YSAINT LOUIS ** 001 001800Mr. MOUSSA SARR 01061982 0000000000002CH5 08235367539 DN17052010 2000000017 010000 QUERTY1301N0YLOUGA ** 003 002900Mr. BASSIROU DILLO 13081967
pour la partie 1
$ cat a1 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010| 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010| $ $ cat a2 Select Case Case "030" vProd = "001" vLGrp = "AZERTY" Case "050" vProd = "003" vLGrp = "QUERTY" Case Else $ $ awk -F"|" 'NF< 3 && /^Case/ {split($0,x,"\"")} ; NF<3 && /vLGrp/ {split($0,t,"\"");z[x[2]]=t[2]};NF> 4 { print $0 z[$2] FS}' a2 a1 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|AZERTY| 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|QUERTY| $
$ cat a1 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010| 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010| $ $ cat a2 Select Case Case "030" vProd = "001" vLGrp = "AZERTY" Case "050" vProd = "003" vLGrp = "QUERTY" Case Else $ $ awk -F"|" '/^Case/ {split($0,x,"\"")} ;/^vLGrp/ {split($0,t,"\"");z[1,x[2]]=t[2]};/^vProd/ {split($0,t,"\"");z[2,x[2]]=t[2]};NF> 4 { print $0 z[1,$2] FS z[2,$2] FS}' a2 a1 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|AZERTY|001| 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|QUERTY|003| $
Bjr Dubcek,
Merci le script fonction tres bien.
je passe a l'etape suivante qui est la dernier:
Explication: Apres avoir injecte ces données ds une table puis mettre a jour la table, j'ai les données suivantes;
cat a3
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|AZUR|001|0000||BN
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|VSEIMM|003|0000||FR
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|VSPDEF|006|0000||SN
je souhaite formater ce fichier en maintenant la taille de chaque colonne comme il ete declare dans la table. Pour cet exemple (CHAR 11 ;CHAR 3; CHAR 5; CHAR 15; CHAR 15; CHAR 8; CHAR 20; CHAR 8; CHAR 6; CHAR 3; CHAR 4; CHAR 4; CHAR 2;)
d'ou le longueur de chaque enregistrement est 105.
cat rslt:
8588476937003001800Moussa sarr 01061982SAINT LOUIS 17052010AZUR 0010000 BN
0823536753905002900Bassirou DILLO 13081967LOUGA 17052010VSEIMM0030000 FR
5367744892006003500Fatou SILLA 27101965COTE IVOIRE 17052010VSPDEF0060000 SN
Merci le script fonction tres bien.
je passe a l'etape suivante qui est la dernier:
Explication: Apres avoir injecte ces données ds une table puis mettre a jour la table, j'ai les données suivantes;
cat a3
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|AZUR|001|0000||BN
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|VSEIMM|003|0000||FR
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|VSPDEF|006|0000||SN
je souhaite formater ce fichier en maintenant la taille de chaque colonne comme il ete declare dans la table. Pour cet exemple (CHAR 11 ;CHAR 3; CHAR 5; CHAR 15; CHAR 15; CHAR 8; CHAR 20; CHAR 8; CHAR 6; CHAR 3; CHAR 4; CHAR 4; CHAR 2;)
d'ou le longueur de chaque enregistrement est 105.
cat rslt:
8588476937003001800Moussa sarr 01061982SAINT LOUIS 17052010AZUR 0010000 BN
0823536753905002900Bassirou DILLO 13081967LOUGA 17052010VSEIMM0030000 FR
5367744892006003500Fatou SILLA 27101965COTE IVOIRE 17052010VSPDEF0060000 SN
Ca fait une longueur de 104
$ cat a3 85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|AZUR|001|0000||BN 08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|VSEIMM|003|0000||FR 53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|VSPDEF|006|0000||SN $ $ awk -F"|" '{printf "%11s%3s%5s%15s%15s%8s%20s%8s%6s%3s%4s%4s%2s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13}' a3 8588476937003001800 Moussa sarr01061982 SAINT LOUIS17052010 AZUR0010000 BN 0823536753905002900 Bassirou DILLO13081967 LOUGA17052010VSEIMM0030000 FR 5367744892006003500 Fatou SILLA27101965 COTE IVOIRE17052010VSPDEF0060000 SN $
$ awk -F"|" '{printf "%11s%3s%5s%-15s%-15s%8s%-20s%8s%-6s%3s%4s%4s%-2s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13}' a3 8588476937003001800Moussa sarr 01061982SAINT LOUIS 17052010AZUR 0010000 BN 0823536753905002900Bassirou DILLO 13081967LOUGA 17052010VSEIMM0030000 FR 5367744892006003500Fatou SILLA 27101965COTE IVOIRE 17052010VSPDEF0060000 SN $
Ds un premier temps je souhaite que fich1 resoit les valeurs suivant le case.
cad:
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|001|AZERTY|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|003|QUERTY|
Deuxiement dans le soucis d'avoir un fichier formaté fixer sur 200 caracteres par enregistement,
je charge mon fichier fich1 dans une table puis ajouter des données non variable.
NB: dans la table toutes les colonnes sont declare en CHAR, de ce faite ces données seront extrat sous le format. fich2.les espace vide sont des données null.