# récupérer lignes et valeurs dans une fichier texte

**URL:** <https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820 "2016-02-21T18:41:41Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/1 "2016-02-21T18:41:41Z")

</div>

Bonjour,

Voici un exemple de fichier texte que j’essaye de traiter avec grep and co :

> [@](#):
>
> Seq VAL1-1 VAL2-1 VAL3-1 VAL4-1  
> 0/1 735921 5505 12 14  
> 0/2 0 0 0 0  
> 0/3 100 0 10 0  
> 0/4 0 0 0 0  
> 0/5 2560 2456 0 0  
> 0/6 0 0 0 0  
> 0/7 0 0 0 0
> 
> Seq VAL1-2 VAL2-2 VAL3-2 VAL4-2  
> 0/1 45351 135 4892 78  
> 0/2 0 0 0 0  
> 0/3 46780 0 179 0  
> 0/4 0 0 0 0  
> 0/5 97560 56 0 0  
> 0/6 0 0 0 0  
> 0/7 0 0 0 0

J’essaye de récupérer toutes les lignes qui sont strictement égale à «&nbsp;0/1&nbsp;»  
Par la suite je cherche à récupérer la valeur «&nbsp;VAL1-1&nbsp;» ET «&nbsp;VAL1-2&nbsp;»

Pour commencer je n’arrive pas à récupérer les deux lignes «&nbsp;0/1&nbsp;», j’ai juste que la première :

```auto
val="0/1"
test=$(grep -w ${val} /root/results.log)
```

Merci !

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/2 "2016-02-21T18:41:42Z")

</div>

Voici ce que ça donne chez moi avec une copie du contenu de ton fichier dans un fichier nommé “results.log” :

`dave@HAL9000:~$ export val="0/1"
dave@HAL9000:~$ grep -w ${val} results.log
0/1 735921 5505 12 14
0/1 45351 135 4892 78
dave@HAL9000:~$ export test=$(grep -w ${val} results.log)
dave@HAL9000:~$ echo $test
0/1 735921 5505 12 14 0/1 45351 135 4892 78
`

Je ne connais pas assez bien le comportement de grep et bash pour t’expliquer pourquoi la valeur de $test est déclarée sur une ligne unique, mais les deux valeurs sont bien présentes.

Peux tu poster un peu plus de ton code pour qu’on puisse mettre tes commandes en contexte ?

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/3 "2016-02-21T18:41:42Z")

</div>

Pour avoir les deux lignes je fais comme ça :

```auto
#!/bin/bash
val="0/1"
test=$(grep -w ${val} /root/results.log)

_VAL_="$(echo "${test}")"

_VAL1_="$(echo "${_VAL_}" | head -n 1)"
_VAL2_="$(echo "${_VAL_}" | head -n 2)"

echo ${_VAL1_} 
echo ${_VAL2_}
```

Par contre si j’essaye de mettre un «&nbsp;cut -d ’ ’ -f2&nbsp;» après les deux echo

```auto
echo ${_VAL1_} | cut -d ' ' -f2
echo ${_VAL2_} | cut -d ' ' -f2
```

Je récupère la même valeur : 735921

![:119](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/4 "2016-02-21T18:41:42Z")

</div>

Si je fais :

```auto
echo ${_VAL1_} | cut -d ' ' -f2
echo ${_VAL2_} | cut -d ' ' -f8
```

Je récupère bien 735921 et 45351

Donc j’ai l’impression que les valeurs VAL1-1 et VAL1-2 sont sur la même ligne.  
Je n’ai pas deux lignes contenant 0/1 de VAL1-1 et le 0/1 de VAL1-2 ![:013](https://www.debian-fr.org/uploads/default/original/1X/086709e9e4d48f0fa24e42243bbce857fc2be47f.gif "colere")

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/5 "2016-02-21T18:41:43Z")

</div>

Je ne suis pas très très bon en programmation,  
mais si le résultat de ce script te convient…

```auto
#!/bin/bash
val="0/1"
test=$(grep -w ${val} /root/results.log)

# sauvegarde de la variable "IFS"
# afin de pouvoir la restaurer à la fin du script
ifstmp=$IFS

# modification de la variable "IFS" pour le caractère de fin de ligne
IFS="\n"

# pour chaque ligne du retour de la commande "grep" précédente
for ligne in $test; do

  # afficher le deuxième champ de la ligne
  echo $ligne | awk '{print $2}'

# opération effectuée pour cette ligne,
# on passe à la ligne suivante (boucle "for")
# jusqu'à plus de ligne à lire dans la variable "test"
done

# restauration de la variable "IFS"
IFS=$ifstmp
```

Ou bien, en une ligne :

```auto

```

Ou bien, en une autre ligne :

```auto

```

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/6 "2016-02-21T18:41:43Z")

</div>

```auto
Donc :
[code]val1=$(awk '$1 == "0/1"{print $2}')
val2=$(awk '$1 == "0/1"{print $3}')[/code]

Si ton fichier est énorme :
[code]values=( $(awk '$1 == "0/1"{print $2,$3}') )
echo "${values[1]}"
echo "${values[2]}"[/code]
```

Donc :

`val1=$(awk '$1 == "0/1"{print $2}')
val2=$(awk '$1 == "0/1"{print $3}')`

Si ton fichier est énorme :

`values=( $(awk '$1 == "0/1"{print $2,$3}') )
echo "${values[1]}"
echo "${values[2]}"`

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/7 "2016-02-21T18:41:45Z")

</div>

@MicP  
Ok cela fonctionne, merci ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

@MisterFreez  
Je n’arrive pas a faire fonctionner ton code… Je suis sous Bash…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/8 "2016-02-21T18:41:45Z")

</div>

Je viens de corriger une faute de frappe ça devrait mieux fonctionner.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/9 "2016-02-21T18:41:46Z")

</div>

@ _seb_ regarde aussi ce que propose MisterFreez:

```auto

```

Le script :

```auto
values=( $(awk '$1 == "0/1"{print $2,$3}') )
echo "values => ${values[*]}"
echo
echo "values[0] => ${values[0]}"
echo "values[1] => ${values[1]}"
echo "values[2] => ${values[2]}"
echo "values[3] => ${values[3]}"
```

@ MisterFreez Va falloir que je démonte tout ça pour apprendre,  
parce que entre la “purée que j’ai pondu” et ça, y-a vraiment pas photo.  
Un grand Merci à MisterFreez.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 6:41 UTC](https://www.debian-fr.org/t/recuperer-lignes-et-valeurs-dans-une-fichier-texte/59820/10 "2016-02-21T18:41:46Z")

</div>

Oui je viens de modifier et cela fonctionne aussi ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")

Un grand merci à vous deux ![:038](https://www.debian-fr.org/uploads/default/original/1X/08df484251490af77ba342c0331f3ee271065fe9.gif "bravo")
