# Terminal et combo texte



## symbol (1 Novembre 2018)

Bonjour,

La commande "cat" du terminal met bout a bout des fichiers, mais je souhaite réaliser un combo a partir de 2 fichiers texte. du coup "cat" me semble sans interet.

Voici 2 fichiers texte (contenant seulement 2 mots chacun, pour l'exemple). 
En realité, ces fichiers contiendront plusieurs milliers de mots.


fichier#1
maison
arbre

fichier#2
rouge
bleu

resultat devra être dans un seul fichier texte
maisonrouge
arbrerouge
maisonbleu
arbrebleu

Le résultat est a sauvegarder dans un fichier texte (.txt)

Une idée dans la manière de réaliser ca ?

Merci


----------



## Membre supprimé 1129907 (1 Novembre 2018)

S'il n'y a pas de numéro de ligne dans tes fichiers :

```
$ cat -n fichier1 > fichier1_number
$ cat -n fichier2 > fichier2_number
$ join fichier1_number fichier2_number
1 maison rouge
2 arbre bleu
$ join fichier1_number fichier2_number | cut -d' ' -f 2,3 | sed 's/ //g'
maisonrouge
arbrebleu
```

Le cat -n ajoute le numéro de ligne ce qui permet à la fonction join de marcher.


----------



## symbol (2 Novembre 2018)

J'essai de suite 

Merci


MAJ :
ooopsssss

je me suis mal expliqué. 
On reprends les memes fichiers (j'ajoute plus de mots pour que ca soit plus clair)

fichier#1.txt
--------------
maison
bateau
avion
voiture

fichier#2.txt
--------------
rouge
bleu
jaune
vert

je souhaite que ca donne :
maisonrouge
maisonbleu
maisonjaune
maisonvert
bateaurouge
bateaubleu
bateaujaune
bateauvert
avionrouge
avionbleu
avionjaune
avionvert
voiturerouge
voiturebleu
voiturejaune
voiturevert

actuellement avec tes lignes de commandes, ca donne
maisonrouge
bateaubleu
avionjaune
voiturevert


----------



## zeltron54 (2 Novembre 2018)

Bonjour, Symbol

Je te met un applescript qui fait le boulot.
Je suppose que ecatomb te fera l'équivalent en shell 


```
tell application "Finder"
    set fichier1 to choose file with prompt "Sélectionnez le fichier 1"
    set fichier2 to choose file with prompt "Sélectionnez le fichier 2"
   
   
    open for access fichier1
    read fichier1
    set lefichier1 to the result
    close access fichier1
    set nb1 to count paragraph of lefichier1
   
    open for access fichier2
    read fichier2
    set lefichier2 to the result
    close access fichier2
    set nb2 to count paragraph of lefichier2
    set lelog to open for access (path to desktop folder as text) & "lacompil.txt" as text with write permission
    repeat with i from 1 to nb2
        repeat with j from 1 to nb1
            write paragraph i of lefichier1 & paragraph j of lefichier2 & return to lelog starting at eof
        end repeat
    end repeat
    close access lelog
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## Membre supprimé 1129907 (2 Novembre 2018)

Remplace le @ par un caractère qui est absent de tes fichiers.

```
$ join -t"@" -12 -22 fichier1 fichier2 | sed 's/@//g'
maisonrouge
maisonbleu
maisonjaune
maisonvert
bateaurouge
bateaubleu
bateaujaune
bateauvert
avionrouge
avionbleu
avionjaune
avionvert
voiturerouge
voiturebleu
voiturejaune
voiturevert
```


----------



## Membre supprimé 1129907 (3 Novembre 2018)

Autre solution :

```
$ while IFS= read -r line
do
sed "s/^/$line/" fichier2
done < fichier1
```

Mais dans ce cas, si ton fichier1 a 100 lignes, ben le ficher2 sera lu 100 fois ... Pas top si tes fichiers sont gros.


----------



## symbol (3 Novembre 2018)

Merci de vos réponses.

Je vais faire des tests, car mes ficheirs peuvent avoir 10 000 lignes.


----------



## symbol (5 Novembre 2018)

@zeltron54
J'ai testé ton script.

Ca commence bien et fini moins bien 

J'ai pris un fichier de 676 mots. J'ai essayé de faire un combo de lui-même (676*676 = 456976)

le script a créé le fichier lacompil.txt, écrit 347610 mots avant de ...planter


----------



## symbol (5 Novembre 2018)

maintenant j'essai la version d'ecatomb.


```
cat -n fichier1 > fichier1_number
cat -n fichier2 > fichier2_number
join -t"@" -12 -22 fichier1 fichier2 | sed 's/@//g'
```

Les mots sont bien gérés, c'est rapide, mais ca me donne un fichier texte (j'ai ajouté > macombo.txt) pas très bien formaté.






Mes fichiers sont formatés :


----------



## Membre supprimé 1129907 (5 Novembre 2018)

symbol a dit:


> Les mots sont bien gérés, c'est rapide, mais ca me donne un fichier texte (j'ai ajouté > macombo.txt) pas très bien formaté.


Peux-tu me donner l'exemple de la ligne en entrée contenant le 676 ?


----------



## zeltron54 (5 Novembre 2018)

Bonjour, symbol

C'est un problème de délai "event", Je l'ai résolu !
Mais c'est très long.
Après un test de la méthode de ecatomb     ... Sa manière est beaucoup beaucoup beaucoup plus rapide et fonctionne très bien, et je n'ai pas de problème de format texte.
Donc je te laisse résoudre ton problème avec lui


----------



## symbol (6 Novembre 2018)

@Zeltron
merci.

@ecatomb
je vais regarder si il manque pas un retour chariot, si je ne trouve rien je t'envoi les 2 fichiers que j'ai utilisé.
merci


----------



## symbol (6 Novembre 2018)

@ecatomb 

J'ai refait la manip, j'ai toujours la même erreur 

     1   aa     1   aa
     1   aa     2   ab
     1   aa     3   ac
     1   aa     4   ad
     1   aa     5   ae
     1   aa     6   af
     1   aa     7   ag
     1   aa     8   ah

voici un dossier ZIP avec tous mes fichiers : 
- 2 fichiers texte contenant les mots (2lettres.txt et 2lettres2.txt)
- 2 fichiers texte après commande "cat -n 2lettres.txt > fichier1_number.txt"   et   "cat -n 2lettres2.txt > fichier2_number.txt"
- 1 fichier texte après commande "join -t"@" -12 -22 fichier1_number.txt fichier2_number.txt | sed 's/@//g' > macombo.txt"

https://workupload.com/file/h4tWsFER

Merci


----------



## zeltron54 (6 Novembre 2018)

Bonjour,
Je viens de lire tes fichiers...
Tout à l'air bon !  que voudrais -tu obtenir exactement ?

Edit : Ce sont les numéros qui te gènes ?


----------



## symbol (6 Novembre 2018)

je comptais avoir les mots collés

ca donne :
     1   aa     1   aa
     1   aa     2   ab
     1   aa     3   ac

J'aimerais
aaaa
aaab
aaac
etccc

je peux dans bbedit retirer les caracteres indesirables. Mais si le fichier texte fait 1 giga, comment veux tu que j'edite ce fichier ?


----------



## symbol (6 Novembre 2018)

@ecatomb

sinon autre chose  :

Dans le script du KENO que tu m'as fait, y'a une ligne qui extrait le N° du dernier tirage posté par la FDJ (sur le site de la FDJ).

Une mise a jour de la page html à la FDJ a été faites.

Depuis la ligne qui extrait le N° de tirage ne fonctionne plus.
Du coup le script reste en carafe, et ne se lance plus. Il se met en attente 10 minutes (600 sec) sans fin, pusque c'est ce N° qui permet de savori si un nouveau tirage est disponible.

Serait possible de mettre a jour cette ligne ?


```
############################################################################################
########################### TEST POUR SAVOIR SI NOUVEAU TIRAGE A LA FDJ ####################
## Si fichier NUMTIRAGE.txt n'existe pas,  alors création du fichier NUMTIRAGE.txt  avec N° du dernier tirage + lancement direct du script
## Si fichier NUMTIRAGE.txt existe, alors comparaison des N° de tirage (Si Nouveau tirage supérieur ->  sauvegarde du N° du dernier tirage dans NUMTIRAGE.txt  + lancement script)
############################################################################################
############################################################################################
repertoire="/Users/xxx/Desktop/KENODATA"

function download_keno () {
  ## créé le fichier keno.html avec la page actuelle du site, sinon on garde l'ancienne
  curl -s 'https://www.fdj.fr/jeux/jeux-de-tirage/keno/resultats' -o "${repertoire}"/keno_tmp -D "${repertoire}"/keno_code_retour
  ## Gestion des erreurs 404 et autres ...
  code_http=$(head -1 "${repertoire}"/keno_code_retour | cut -d " " -f2)
  ## https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
  if [ "${code_http}" == "200" ]
  then
    iconv -f 'iso-8859-15' -t 'UTF-8' "${repertoire}"/keno_tmp > "${repertoire}"/keno.html
    rm -f "${repertoire}"/keno_code_retour "${repertoire}"/keno_tmp
  fi
}

function attente_nouveau_tirage () {
  tirage_keno=$(grep "listDayTirage" "${repertoire}"/keno.html | cut -d'"' -f2)
  if [ -f "${repertoire}"/NUMTIRAGE.txt ]
  then
    echo le fichier existe
    tirage_fichier=$(cat "${repertoire}"/NUMTIRAGE.txt)

    ## tant que nouveau tirage identique/inférieur à celui du fichier
    while [ ${tirage_keno} -le ${tirage_fichier} ]
    do
      echo Pause de 10min
      sleep 600

      download_keno
      tirage_keno=$(grep "listDayTirage" "${repertoire}"/keno.html | cut -d'"' -f2)
    done
  fi

  ## créé le fichier NUMTIRAGE.txt avec le N° du dernier tirage
  echo ${tirage_keno} >  "${repertoire}"/NUMTIRAGE.txt
}

download_keno
attente_nouveau_tirage

## Extraction du résultat à partir de "${repertoire}"/keno.html
echo Extraction du résultat
```

Merci.


----------



## zeltron54 (6 Novembre 2018)

Alors en combinant le script de ecatomb et le mien, essai le script ci-dessous, et dis -moi si cela te conviens ? 
A modifier l'adresse du fichier de sorti bien sur !


```
tell application "Finder"
    set fichier1 to choose file with prompt "Sélectionnez le fichier 1"
    set fichier2 to choose file with prompt "Sélectionnez le fichier 2"
   
    set fichier1 to quoted form of POSIX path of fichier1 as string
    set fichier2 to quoted form of POSIX path of fichier2 as string
   
    set lacommande to "join -t" & "@" & " -12 -22 " & fichier1 & " " & fichier2 & " | sed 's/@//g' > /Users/XXXX/Desktop/macombo.txt"
    do shell script lacommande
   
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## symbol (6 Novembre 2018)

@zeltron54

J'essai de suite.

MAJ :

C'est bon  (j'ai juste changé /XXXX/  par /XXX/)

Merci


----------



## Membre supprimé 1129907 (6 Novembre 2018)

La commande fonctionne très bien avec les fichiers 2lettres 

```
join -t"@" -12 -22 2lettres.txt 2lettres2.txt | sed 's/@//g' > macombo.txt
```


----------

