Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

En 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é big_smile  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  smile

J'ai bien sur aussi testé les 3 propositions de Watael mais malheureusement sans succès. sad
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

cristobal78 a écrit :

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

cristobal78 a écrit :

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.

En 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 smile smile smile

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