#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,
même résultat aussi surprenant (pour moi) je n'arrive pas à comprendre
Remplace les tabulations par des espaces.
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
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
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... ? »
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
« 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
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