Sed/awk pour lier 2 fichier plats
Résolu/Fermé
Utilisateur anonyme
-
12 juil. 2010 à 23:03
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 28 juil. 2010 à 16:04
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 28 juil. 2010 à 16:04
A voir également:
- Sed/awk pour lier 2 fichier plats
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir fichier .bin - Guide
5 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
13 juil. 2010 à 12:35
13 juil. 2010 à 12:35
hello
un p'tit coup de awk
un p'tit coup de awk
$ cat f1.awk BEGIN {a["D"]="Date";a["N"]="Number";a["C"]="Char"} NF < 2 { x[substr($0,1,5), substr($0,12,6)]=1} NF > 2 && x[$3,$5] {y[$3]=y[$3] $5 " " a[$7] " ("$9"), "} END {for (n in y){sub(", $","",y[n]);print "CREATE TABLE",n,"(" y[n] ");"}} $ $ (cat fichier1 ; sort -t ";" -k 3 fichier2 ) | awk -F ";" -f f1.awk CREATE TABLE tab01 (champ1 Date (08), champ2 Number (05), champ3 Char (50)); CREATE TABLE tab02 (champ1 Date (08), champ2 Number (05)); $
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
13 juil. 2010 à 07:44
13 juil. 2010 à 07:44
Salut,
J'ai du mal à comprendre le rapport qui existe entre le fichier1 et le fichier2 !!??
Quels sont les critères qui unissent les 2 fichiers dans la requête à fournir ?
Si on s'en réfère à ton exemple, seul le fichier2 est utile pour écrire la requête, non ?
J'ai du mal à comprendre le rapport qui existe entre le fichier1 et le fichier2 !!??
Quels sont les critères qui unissent les 2 fichiers dans la requête à fournir ?
Si on s'en réfère à ton exemple, seul le fichier2 est utile pour écrire la requête, non ?
Utilisateur anonyme
13 juil. 2010 à 09:10
13 juil. 2010 à 09:10
Bonjour jipicy,
le fichier #1 permet de savoir quels enregistrements du fichier #2 sélectionner : tab01.champ4 n'apparaît pas dans le fichier #1, il ne faut pas le retenir du fichier #2.
le fichier #1 permet de savoir quels enregistrements du fichier #2 sélectionner : tab01.champ4 n'apparaît pas dans le fichier #1, il ne faut pas le retenir du fichier #2.
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
13 juil. 2010 à 09:19
13 juil. 2010 à 09:19
Salut,
Ca sera pas plus facile de donner un exemple concret en utilisant tes fichiers?
Ca sera pas plus facile de donner un exemple concret en utilisant tes fichiers?
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
13 juil. 2010 à 09:22
13 juil. 2010 à 09:22
Re,
Si j'ai bien compris, par exemple si on prends la tab02 tu dois obtenir
?!
Si j'ai bien compris, par exemple si on prends la tab02 tu dois obtenir
CREATE TABLE tab02 (champ1 Date( 08), champ2 Number (05));
?!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
13 juil. 2010 à 09:35
13 juil. 2010 à 09:35
Merci de répondre si vite.
Comme le dit qqchquicommenceparQ, le fichier 1 possede les tables, les champs et "l'ordre" dans/avec/pour (?) lequel on me demande de créér les champs.
Il est lié au fichier 2 (qui lui possède tout) par les informations "table" et "champs".
Dans le fichier 1, la table correspond au 5 premiers carracteres (donc je pense que que j'aurai un "cut -c0-5" quelque part), dans le fichier 2 c'est le deuxieme "champs" - ou du caractere 5 au carractere 10, puisqu'il n'y a pas qu'une façon de résoudre.A
Concernant les champs, on le trouve du carractere 11 à 16 pour le fichier 1 et en 3ème colonne dans le fichier 2.
Comme le dit qqchquicommenceparQ, le fichier 1 possede les tables, les champs et "l'ordre" dans/avec/pour (?) lequel on me demande de créér les champs.
Il est lié au fichier 2 (qui lui possède tout) par les informations "table" et "champs".
Dans le fichier 1, la table correspond au 5 premiers carracteres (donc je pense que que j'aurai un "cut -c0-5" quelque part), dans le fichier 2 c'est le deuxieme "champs" - ou du caractere 5 au carractere 10, puisqu'il n'y a pas qu'une façon de résoudre.A
Concernant les champs, on le trouve du carractere 11 à 16 pour le fichier 1 et en 3ème colonne dans le fichier 2.
13 juil. 2010 à 12:56
C'est plutôt un grand coup ;-)
13 juil. 2010 à 14:35
Je pensais que vous alliez proposer un sed et plein de pipes ; par chance, c'est un awk avec une suite d'instruction. Je devrais pouvoir le comprendre un peu plus facilement.
L'idée de faire un tableau de substitution est géniale. Je me voyais déjà faire une suite de s/ ou de tr.
Je continue mon exploration de cette solution et je reviens dès que j'ai compris pourquoi un utilise NF :)
Mais merci beaucoup, je pense que je vais pouvoir apprendre énormément grace à cet exemple.
13 juil. 2010 à 15:06
13 juil. 2010 à 15:35
Je ne comprends pas bien le fonctionnement de la lecture.
L'idée estde lire le fichier 1 ligne par ligne ; et pour chaque ligne du fichier 1, chercher la bonne ligne dans le fichier 2. Si les 2 fichiers sont ouverts en même temps par awk, peut etre conserver le numero de ligne ou on en était dans le fichier 2 (pour ne pas relire le fichier 2 (15k lignes) depuis le début à chaque fois).
J'ai compris le fonctionnement de x[$3,$5] ... c'est franchement pas mal aussi. Mais du coup, je ne comprends pas comment est faite la lecture des deux fichiers en simultanés
avec awk.
Des explications ?
13 juil. 2010 à 15:48
ne comprends pas comment est faite la lecture des deux fichiers en simultanés
Ce n'est pas simultanés mais un après l'autre.
La lecture est faite avec cette commande (tu peux taper seulement ça pour voir)
cat fichier1 ; sort -t ";" -k 3 fichier2
et la sortie est lue par awk -F ";" -f f1.awk