A voir également:
- Concaténation en ksh
- Concaténation pdf - Guide
- Concatener plusieurs feuilles excel en une seule - Guide
- Ksh substring - Forum Shell
- Ksh read ✓ - Forum Shell
- Concaténation en c ✓ - Forum C
5 réponses
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
13 juil. 2013 à 13:16
13 juil. 2013 à 13:16
essayer avec awk
$ awk -F ";" 'FNR==NR {t[++l]=$0; next} {for(n=1; n<=l;n++){if(!t[n])continue; split(t[n], a); for(m=1; m<=NF; m++)if(a[m]==$m){print $0 RS t[n]; t[n]=""}} next}' fic2 fic1 25678;type1;harrys;6789;hji khkq;skdjh;99900;6789 67890;type4;uname;6799;kloo qdsss;uuud;uname;uioo 67890;type4;uname;6799;kloo 67890;jjuii;sdds;00097 $
Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
260
Modifié par Flachy Joe le 12/07/2013 à 22:37
Modifié par Flachy Joe le 12/07/2013 à 22:37
Salut,
je sais pas si c'est le plus simple, mais ça fonctionne :
;-) Flachy Joe ;-)
je sais pas si c'est le plus simple, mais ça fonctionne :
#!/bin/bash t1="25678;type1;harrys;6789;hji 67890;type4;uname;6799;kloo 67890;type3;basic;6089;lois" f2="test.tmp" echo "udhk;juikop;cassiop;768888 khkq;skdjh;99900;6789 qdsss;uuud;uname;uioo 67890;jjuii;sdds;00097" > $f2 std_IFS=$IFS for l in $t1 do IFS=";" for pattern in $l do res=$(egrep "\<${pattern}\>" $f2) if [ -n "$res" ] then echo "$l" echo "$res" echo fi unset res done; IFS=$std_IFS done; rm $f2
;-) Flachy Joe ;-)
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
Modifié par dubcek le 13/07/2013 à 09:23
Modifié par dubcek le 13/07/2013 à 09:23
hello
quand plusieurs lignes ont un champ commun, quel est le critère ? l'ordre des lignes ?
quand plusieurs lignes ont un champ commun, quel est le critère ? l'ordre des lignes ?
cat fic1 67890;type4;uname;6799;kloo 67890;type3;basic;6089;lois cat fic2 qdsss;uuud;uname;uioo 67890;jjuii;sdds;00097
yepimback
Messages postés
4
Date d'inscription
vendredi 12 juillet 2013
Statut
Membre
Dernière intervention
14 juillet 2013
Modifié par yepimback le 13/07/2013 à 12:41
Modifié par yepimback le 13/07/2013 à 12:41
merci pour vos réponses:
j'étais trop fatigué hier soir ... plus moyen de lire le moindre ls :/
@dubcek
le seul critère c'est que les lignes contenant au moins une chaîne de caractères en commun soit ensemble.
dans ton exemple:
cat fic1
67890;type4;uname;6799;kloo
67890;type3;basic;6089;lois
cat fic2
qdsss;uuud;uname;uioo
67890;jjuii;sdds;00097
=> cat fic_final
67890;jjuii;sdds;00097
67890;type3;basic;6089;lois
67890;type4;uname;6799;kloo
qdsss;uuud;uname;uioo
dans le mien normalement seul 2 champs sont identiques à chaque fois.
@Flashy Joe:
je n'ai pas bash d'installé, faudrait que je teste
(je viens d'essayer en ash sur un synology et ça retourne rien... dommage parce que ça avait l'air pas mal... tu viens de me tendre un fil directeur ;) )
Merci ;)
j'étais trop fatigué hier soir ... plus moyen de lire le moindre ls :/
@dubcek
le seul critère c'est que les lignes contenant au moins une chaîne de caractères en commun soit ensemble.
dans ton exemple:
cat fic1
67890;type4;uname;6799;kloo
67890;type3;basic;6089;lois
cat fic2
qdsss;uuud;uname;uioo
67890;jjuii;sdds;00097
=> cat fic_final
67890;jjuii;sdds;00097
67890;type3;basic;6089;lois
67890;type4;uname;6799;kloo
qdsss;uuud;uname;uioo
dans le mien normalement seul 2 champs sont identiques à chaque fois.
@Flashy Joe:
je n'ai pas bash d'installé, faudrait que je teste
(je viens d'essayer en ash sur un synology et ça retourne rien... dommage parce que ça avait l'air pas mal... tu viens de me tendre un fil directeur ;) )
Merci ;)
Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
260
13 juil. 2013 à 13:02
13 juil. 2013 à 13:02
ksh est compatible bash, il suffit de changer la première ligne en
Résultat :
#!/bin/ksh
Résultat :
flachy@biduloscope:~$ apt-cache show ksh Package: ksh Version: 93u+20120801-1 [...] flachy@biduloscope:~$ ./test.sh 25678;type1;harrys;6789;hji khkq;skdjh;99900;6789 67890;type4;uname;6799;kloo 67890;jjuii;sdds;00097 67890;type4;uname;6799;kloo qdsss;uuud;uname;uioo 67890;type3;basic;6089;lois 67890;jjuii;sdds;00097
yepimback
Messages postés
4
Date d'inscription
vendredi 12 juillet 2013
Statut
Membre
Dernière intervention
14 juillet 2013
Modifié par yepimback le 13/07/2013 à 13:10
Modifié par yepimback le 13/07/2013 à 13:10
ksh n'est pas installé sur mon syno... je testerai de toutes façon au boulot lundi
en tout merci pour ton aide ;)
en tout merci pour ton aide ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
14 juil. 2013 à 15:36
14 juil. 2013 à 15:36
essayer cet algorithme, peut-être plus rapide, si il fonctionne bien !!
$ awk -F ";" -v f=fic2 'BEGIN{nr=1; while(getline < f){for(n=1; n<=NF; n++)t[nr, $n]++; t2[nr++]=$0}} {for(l=1; l<nr; l++){split($0, a); for(m=1; m<=NF; m++)if(t[l, a[m]] && t2[l]){print $0 RS t2[l]; t2[l]=""; next}}}' fic1 25678;type1;harrys;6789;hji khkq;skdjh;99900;6789 67890;type4;uname;6799;kloo qdsss;uuud;uname;uioo 67890;type3;basic;6089;lois 67890;jjuii;sdds;00097 $
Modifié par Flachy Joe le 13/07/2013 à 13:26
J'ai d'ailleurs dit l'autre fois que si on faisait une boucle dans un script c'est qu'on avait raté quelque chose...
13 juil. 2013 à 17:22
Des que j'ai mon Pc sous la main j'essaye. Tu peux expliquer grossièrement?
1000 merci
13 juil. 2013 à 20:03
je viens d'essayer... malheureusement pour les très gros fichiers de plusieurs ko ça ne me rend jamais la main après 10 minutes. et quand je fais un top (HPUX) je m'aperçois que c'est extrêmement consommateur de cpu.
il doit y a voir un truc qui va pas :(
j'y retourne :)
14 juil. 2013 à 09:27
comment faire autrement ?
14 juil. 2013 à 11:07