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 09/05/2020, à 06:27

ar barzh paour

[Résolu] les parenthèses mal placées

hello bonjour à tous

je ne comprends pas comment faire fonctionner les (    )

les deux fichiers qui doivent être lus

cat f1.txt
x11-x12-x13-x14
y11-y12-y13-y14

z11-z12-z13-z14
cat f2.txt
x21-x22-x23-x24
y21-y22-y23-y24

z21-z22-z23-z24

ce qui marche "bien" , (sauf que IFS est modifié)

for f in f1.txt f2.txt
do

	IFS="-"
	while read a b c d
		do
		echo "$a;$b;$c;$d"
		done < "$f"

done 

# le résultat :

x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24

je vérifie l'IFS : il a été modifié

echo -e "$IFS" |od -c
0000000   -  \n
0000002

( remarque : j'ai une solution : sauvegarder IFS et restituer après )
OLDIFS="$IFS" et après IFS="$OLDIFS"
mais je voulais utiliser les parenthèses


===================================================================================
je voudrais donc éviter la modification de l'IFS , en utilisant les parenthèses
(avant l'essai suivant j'ai restauré l'IFS )

for f in f1.txt f2.txt
do
   ( 	IFS="-"
	while read a b c d
		do
		echo "$a;$b;$c;$d"
		done < "$f"
   )      
done 

le résultat surprenant dans un terminal

for f in f1.txt f2.txt
> do
>     (
> IFS="-"
> while read a b c d
> 
Display all 1930 possibilities? (y or n)
!                                      lspcmcia
./                                     lspgpot
:                                      lsusb
[                                      ltrace
[[                                     __ltrim_colon_completions
]]                                     luit
{                                      lwp-download
}                                      lwp-dump
aa-enabled                             lwp-mirror
aa-exec                                lwp-request
aa-remove-unknown                      lz
aa-status                              lz4
aa-teardown                            lz4c
accessdb                               lz4cat
aconnect                               lzcat
acpid                                  lzcmp
acpi_listen                            lzdiff
add-apt-repository                     lzegrep
addgnupghome                           lzfgrep
addgroup                               lzgrep
addpart                                lzless
add-shell                              lzma
adduser                                lzmainfo
agetty                                 lzmore
> e < "$f"
>      )
bash: erreur de syntaxe près du symbole inattendu « ) »
done 
bash: erreur de syntaxe près du symbole inattendu « done »

remarque : je vérifie l'IFS : il a été modifié

echo -e "$IFS" |od -c
0000000   -  \n
0000002

===============================================================================

je restaure l'IFS puis
j'essaie en insérant cette fois le tout entre parenthèses

(
for f in f1.txt f2.txt
do
  	IFS="-"
	while read a b c d
		do
		echo "$a;$b;$c;$d"
		done < "$f"
       
done 
)

même résultat aussi surprenant (pour moi) je n'arrive pas à comprendre

 (
> for f in f1.txt f2.txt
> do
>   IFS="-"
> while read a b c d
> 
Display all 1930 possibilities? (y or n)
!                                      lspcmcia
./                                     lspgpot
:                                      lsusb
[                                      ltrace
[[                                     __ltrim_colon_completions
]]                                     luit
{                                      lwp-download
}                                      lwp-dump
aa-enabled                             lwp-mirror
aa-exec                                lwp-request
aa-remove-unknown                      lz
aa-status                              lz4
aa-teardown                            lz4c
accessdb                               lz4cat
aconnect                               lzcat
acpid                                  lzcmp
acpi_listen                            lzdiff
add-apt-repository                     lzegrep
addgnupghome                           lzfgrep
addgroup                               lzgrep
addpart                                lzless
add-shell                              lzma
adduser                                lzmainfo
agetty                                 lzmore
> e < "$f"
>        
> done 
bash: erreur de syntaxe près du symbole inattendu « done »
)
bash: erreur de syntaxe près du symbole inattendu « ) »

maigre consolation :
je vérifie l'IFS : cette fois il n'a pas été modifié !!!!!

 echo -e "$IFS" |od -c
0000000      \t  \n  \n
0000004

quelle explication donner à ce résultat
le défi du jour :
comment obtenir le résultat "attendu" comme au début en utilisant les parenthèses
c'est à dire lecture des fichiers f1 et f2 , sans modification de l'IFS

Dernière modification par ar barzh paour (Le 09/05/2020, à 09:02)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 09/05/2020, à 07:06

Watael

Re : [Résolu] les parenthèses mal placées

salut,

l'IFS doit être défini de "manière environnementale" pour read uniquement* :

IFS='-' read a b c d <<<'1-2-3-4'

ce n'est pas propre à read, ça fonctionne pour toutes les commandes :

$ maFonc() { echo "foo: $foo";}
$ foo="bar" maFonc
bar
$ echo "$foo"
$

--
* ce qui permet de ne pas modifier l'environnement courant.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 09/05/2020, à 07:27

nany

Re : [Résolu] les parenthèses mal placées

Bonjour,


ar barzh paour a écrit :

même résultat aussi surprenant (pour moi) je n'arrive pas à comprendre

Remplace les tabulations par des espaces.

ar barzh paour a écrit :

le défi du jour :
comment obtenir le résultat "attendu" comme au début en utilisant les parenthèses
c'est à dire lecture des fichiers f1 et f2 , sans modification de l'IFS

Avec awk ?

awk -F'-' '{print $1";"$2";"$3";"$4}' f1.txt f2.txt

Hors ligne

#4 Le 09/05/2020, à 08:18

diesel

Re : [Résolu] les parenthèses mal placées

Comme l'a dit Watael, il suffit de placer le IFS='-' au bon endroit. Ça donne ça (sans parenthèses) :

for f in f1.txt f2.txt
	do
	while IFS='-' read a b c d
		do	
		echo "$a;$b;$c;$d"
		done < "$f"
	done

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#5 Le 09/05/2020, à 08:20

ar barzh paour

Re : [Résolu] les parenthèses mal placées

merci nany

nany a écrit :

Remplace les tabulations par des espaces.

je viens de changer de version (20.04) et de m'apercevoir que mon éditeur était en mode "tabulation" et non "espace"
je rectifie tout de suite

avec awk évidemment ça fonctionne

jpb@jpb-MS-7A70:~$ awk -F'-' '{print $1";"$2";"$3";"$4}' f1.txt f2.txt
x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24
jpb@jpb-MS-7A70:~$ 

Dernière modification par ar barzh paour (Le 09/05/2020, à 08:25)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#6 Le 09/05/2020, à 08:23

ar barzh paour

Re : [Résolu] les parenthèses mal placées

diesel a écrit :

il suffit de placer le IFS='-' au bon endroit.

alors j'ai un souci !   (EDIT : voir #10)

jpb@jpb-MS-7A70:~$ for f in f1.txt f2.txt
> do
> while IFS='-' read a b c d
> 
Display all 1930 possibilities? (y or n)
!                                      lspcmcia
./                                     lspgpot
:                                      lsusb
[                                      ltrace
[[                                     __ltrim_colon_completions
]]                                     luit
{                                      lwp-download
}                                      lwp-dump
aa-enabled                             lwp-mirror
aa-exec                                lwp-request
aa-remove-unknown                      lz
aa-status                              lz4
aa-teardown                            lz4c
accessdb                               lz4cat
aconnect                               lzcat
acpid                                  lzcmp
acpi_listen                            lzdiff
add-apt-repository                     lzegrep
addgnupghome                           lzfgrep
addgroup                               lzgrep
addpart                                lzless
add-shell                              lzma
adduser                                lzmainfo
agetty                                 lzmore
> e < "$f"
> done
bash: erreur de syntaxe près du symbole inattendu « done »
jpb@jpb-MS-7A70

Dernière modification par ar barzh paour (Le 09/05/2020, à 08:44)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#7 Le 09/05/2020, à 08:24

Watael

Re : [Résolu] les parenthèses mal placées

quel est ton éditeur ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 09/05/2020, à 08:26

ar barzh paour

Re : [Résolu] les parenthèses mal placées

@Watael
je viens de regarder

Terminal de gnome 3.36.1.1 Un émulateur de terminal pour le bureau GNOME
Version 0.60.1 de VTE utilisée +BIDI +GNUTLS +ICU +SYSTEMD

en n'utilisant pas les parenthèses et avec IFS "sur while"
c'est bon

jpb@jpb-MS-7A70:~$ for f in f1.txt f2.txt
> do
>     while IFS="-" read a b c d
>     do
>         echo "$a;$b;$c;$d"
>     done < "$f"
> done
x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24
jpb@jpb-MS-7A70:~$ echo -e "$IFS" |od -c
0000000      \t  \n  \n
0000004
jpb@jpb-MS-7A70:~$ 

Dernière modification par ar barzh paour (Le 09/05/2020, à 08:33)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#9 Le 09/05/2020, à 08:33

Watael

Re : [Résolu] les parenthèses mal placées

ce n'est pas un éditeur, c'est un terminal.

et dans le terminal, deux tabulations demandent la complétion.
sans début de commande, le shell propose toutes les commandes dans les PATH.

Dernière modification par Watael (Le 09/05/2020, à 08:33)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 09/05/2020, à 08:38

ar barzh paour

Re : [Résolu] les parenthèses mal placées

@Watael
je réponds n'importe quoi

editeur : gedit 3.36.1 gedit est un petit éditeur de texte, léger, pour le bureau GNOME

mais effectivement , ce sont les tabulations qui sèment le trouble !!!!

Dernière modification par ar barzh paour (Le 09/05/2020, à 08:44)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#11 Le 09/05/2020, à 08:50

Watael

Re : [Résolu] les parenthèses mal placées

« autre chose ? je peux... ? »
smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 09/05/2020, à 09:00

ar barzh paour

Re : [Résolu] les parenthèses mal placées

merci à tous pour vos réponses

donc dans un bash ça marche , dans le terminal les tabulations perturbent
lect-sans-tab.sh

#/bin/bash
# sans tabulation
for f in f1.txt f2.txt
    do
    while IFS='-' read a b c d
       do	
         echo "$a;$b;$c;$d"
       done < "$f"
    done
jpb@jpb-MS-7A70:~$ bash ./lect-sans-tab.sh
x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24
jpb@jpb-MS-7A70:~$ 

lect-tab.sh
#/bin/bash
# avec tabulation

for f in f1.txt f2.txt
	do
		while IFS='-' read a b c d
			do	
				echo "$a;$b;$c;$d"
			done < "$f"
	done
bash ./lect-tab.sh
x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24
jpb@jpb-MS-7A70:~$ 

Dernière modification par ar barzh paour (Le 09/05/2020, à 09:02)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#13 Le 09/05/2020, à 09:05

ar barzh paour

Re : [Résolu] les parenthèses mal placées

Watael a écrit :

« autre chose ? je peux... ? »

Display all 1930 possibilities? (y or n)
!                                      lspcmcia
./                                     lspgpot
:                                      lsusb
....

qu'est-ce que c'est ? des commandes ?

Dernière modification par ar barzh paour (Le 09/05/2020, à 09:06)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#14 Le 09/05/2020, à 09:06

Watael

Re : [Résolu] les parenthèses mal placées

comment passes-tu de gedit à gnome-terminal ?
tu fais un copier-coller ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 09/05/2020, à 09:08

ar barzh paour

Re : [Résolu] les parenthèses mal placées

Watael a écrit :

comment passes-tu de gedit à gnome-terminal ?
tu fais un copier-coller ?

dans ce cas précis oui
j'écris le petit script dans l'éditeur , je sélectionne le tout je copie , j'ouvre le terminal et je colle

Dernière modification par ar barzh paour (Le 09/05/2020, à 09:09)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#16 Le 09/05/2020, à 09:28

Watael

Re : [Résolu] les parenthèses mal placées

alors que tu pourrais enregistrer le fichier, le rendre exécutable, et l'exécuter en indiquant son chemin (sans appeler explicitement bash).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 09/05/2020, à 11:35

ar barzh paour

Re : [Résolu] les parenthèses mal placées

c'est ce que j'avais fait pour l'un des deux fichiers

jpb@jpb-MS-7A70:~$ ls -ails lect*
132074 4 -rw-rw-r-- 1 jpb jpb 157 mai    9 09:52 lect-sans-tab.sh
132246 4 -rwxrwxr-x 1 jpb jpb 131 mai    9 09:51 lect-tab.sh
jpb@jpb-MS-7A70:~$ 

mais c'était après avoir compris qu'il y avait une différence d'exécution avec l'utilisation du terminal


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne