#1 Le 17/08/2021, à 23:33
- cristobal78
mettre bout à bout les lignes d'un fichier et en faire une variable
Bonjour à tous
je dispose d'un fichier texte nommé "pile" dont chaque ligne est un mot sans espace, sans blanc ou autre caractère bizarre et donc qui ressemble à ça :
cat pile
aaa
bbb
dgd
gkgk
moi@pc $>
et je voudrais mettre ça sous la forme d'une liste de mots "à la queue leu leu", donc comme ça :
aaa bbb dgd gkgk
dont ensuite je veux faire une variable var telle que
echo $var
aaa bbb dgd gkgk
Pour cela jai testé la commande suivante :
while read line; do echo -n $line$" "; done < pile
Ca marche lais je suis embété car au bout de ma ligne se trouve mon prompt :
aaa bbb dgd gkgk moi@pc $>
Comment faire pour avoir
aaa bbb dgd gkgk
moi@pc $>
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#2 Le 17/08/2021, à 23:55
- Watael
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
il y a plusieurs façons :
while read -r line; do test -n "$lines" && lines+=" $line" || lines="$line"; done <"$fichier"
mapfile -t tmp < "$fichier"
lines="${tmp[@]}"
tmp=$(<"$fichier")
lines=${tmp//$'\n'/ }
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 18/08/2021, à 06:06
- pingouinux
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
Bonjour,
Autre solution, puisque le fichier a ces caractéristiques : chaque ligne est un mot sans espace, sans blanc ou autre caractère bizarre
$ var=$(cat pile)
$ echo $var
aaa bbb dgd gkgk
$ var=$(sed -z 's/\n/ /g' pile)
$ echo "$var"
aaa bbb dgd gkgk
Hors ligne
#4 Le 18/08/2021, à 10:12
- cristobal78
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
Bonjour
merci à watael et pingouinux
pingouinux a bien repéré les caractéristiques des données de la "pile" et m'a fait découvrir qu'on pouvait faire une variable avec une commande "cat".
C'était si simple que je n'y avais même pas pensé !
Et en plus ça marche !!!
Merci
J'ai bien sur aussi testé les 3 propositions de Watael mais malheureusement sans succès.
De plus je n'arrive pas à voir précisément ce qu'elles font.
Je suppose que leur plus grande complexité tient au fait que Watael a envisagé le cas général, où certains mots (ou tous) constituant chaque ligne du fichier texte contiendraient des blancs ou des car. bizarres.
Si c'est ça alors j'aimerais bien comprendre ces commandes car elles pourraient m’être d'un grand secours dans le futur.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#5 Le 18/08/2021, à 10:50
- MicP
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
Bonjour
J'ai bien sur aussi testé les 3 propositions de Watael mais malheureusement sans succès. …
Pour essayer de t'aider à comprendre,
on pourrait reformuler les 3 propositions de solution de watael
comme ci-dessous :
michel@debbull:~$ cat pile
aaa
bbb
dgd
gkgk
michel@debbull:~$ while read -r line; do test -n "$lines" && lines+=" $line" || lines="$line"; done < pile
michel@debbull:~$ echo "$lines"
aaa bbb dgd gkgk
michel@debbull:~$
michel@debbull:~$ cat pile
aaa
bbb
dgd
gkgk
michel@debbull:~$ mapfile -t tmp < pile
michel@debbull:~$ echo "${tmp[@]}"
aaa bbb dgd gkgk
michel@debbull:~$
michel@debbull:~$ cat pile
aaa
bbb
dgd
gkgk
michel@debbull:~$ tmp=$(<pile)
michel@debbull:~$ line=${tmp//$'\n'/ }
michel@debbull:~$ echo "$line"
aaa bbb dgd gkgk
michel@debbull:~$
EDIT : Ajout guillemets. Voir le message #7 de watael
Dernière modification par MicP (Le 18/08/2021, à 17:01)
Hors ligne
#6 Le 18/08/2021, à 12:11
- cristobal78
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
merci micP
je vais regarder ça attentivement
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#7 Le 18/08/2021, à 14:19
- Watael
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
malheureusement sans succès
ça, ça ne va pas nous aider à faire des corrections.
il nous faut une description plus détaillée de comment "ça marche pas"..
/!\ echo $var, ce n'est pas pareil que echo "$var".
$ var='ga
bu
zo
meuh'
$ echo $var
ga bu zo meuh
$ echo "$var"
ga
bu
zo
meuh
$
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 18/08/2021, à 17:59
- cristobal78
Re : mettre bout à bout les lignes d'un fichier et en faire une variable
Watael tu as parfaitement raison
et je reviendrais plus tard -promis- sur ce sujet, mais là je suis dans mes derniers préparatifs pour partir assez loin en vacances ce soir !
A bientôt.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne