c'est la même chose, de quelle adaptation parles-tu ?
si tu as des résultats différents entre les deux formes (multi vs. uni ligne), c'est que ton script est encore au format DOS, et non au format UNIX !
je ne comprends pas pourquoi vous dites que mon script est en format DOS
parce qu'il n'y a pas de raison que ça fonctionne quand la commande est sur une ligne :plutôt que sur plusieurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part while read -r line;do echo "$line";done < <(tr -d '\r' <1.txt)à moins que l'adaptation consiste à indiquer le nom correct du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while read -r line do echo "$line" done < <(tr -d '\r' <./fichier)
justement je ne comprends pas pourquoi .je cherche mais ne trouve pas .ceci dit grace à vous j'ai plusieurs méthodes pour faire ce que j'ai besoin mais pour le bug des multi lignes c'est débile mais je n'arrive pas à comprendre
merci jack-it de s'occuper de mon petit probleme
je donne mon code multi ligne du fichier p_dupli_img.sh
je lance ton code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/bin/bash while read -r line do echo "$line" done < <(tr -d '\r' <1.txt)
et j'ai ce resultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 od -c /cygdrive/c/cygwin64/bin/p_dupli_img.sh
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 0000000 # ! / b i n / b a s h \r \n # f 0000020 o r l i n e i n $ ( c a t 0000040 1 . t x t | t r - d ' 0000060 \ r ' ) \r \n # d o c p " x 0000100 x . j p g " r e p _ d e s t / 0000120 " $ l i n e " \r \n # d o n e \r 0000140 \n # w h i l e r e a d - r 0000160 l i n e ; d o ; e c h o " $ 0000200 l i n e " ; d o n e < < ( t r 0000220 - d ' \ r ' < 1 . t x t ) 0000240 \r \n # w h i l e r e a d - 0000260 d $ ' \ r ' v a r ; d o 0000300 c p " x x . j p g " " r e p 0000320 _ d e s t / $ v a r " ; d o n e 0000340 < 1 . t x t \r \n # w h i l 0000360 e r e a d - r l i n e ; d 0000400 o e c h o " $ l i n e " ; d 0000420 o n e < < ( t r - d ' \ 0000440 r ' < 1 . t x t ) \r \n w 0000460 h i l e r e a d - r l i n 0000500 e \r \n d o \r \n e c h o " 0000520 $ l i n e " \r \n d o n e < < 0000540 ( t r - d ' \ r ' < 1 . t 0000560 x t ) \r \n 0000565
voilà. \r\n : fins de lignes W$ !
Code : Sélectionner tout - Visualiser dans une fenêtre à part # ! / b i n / b a s h \r \n
ton script n'est pas au format UNIX, il est au format DOS.
et bigs3232, toujours pile-poil à côté de la plaque : le résultat d'od -c montre f o r l i n e i n $ ( c a t, ce qui ne correspond pas au script montré au début du message :while read...
donc, on ne sait toujours pas.
oui n_bah .merci pour ton aide voilà le resultat avec la boucle while
le code0000000 # ! / b i n / b a s h \r \n w h i
0000020 l e r e a d - r l i n e \r
0000040 \n d o \r \n e c h o " $ l
0000060 i n e " \r \n d o n e < < ( t
0000100 r - d ' \ r ' < 1 . t x t
0000120 ) \r \n
0000123
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/bin/bash while read -r line do echo "$line" done < <(tr -d '\r' <1.txt)
Ton script n'est toujours pas au format Unix.
Quel éditeur utilises-tu pour le modifier ?
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
Dans la barre d'état, double clic sur Windows (CR LF) et choisir Convertir en Format Unix (LF).
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
eureka .grand merci à al1_24 et bien sur aux autres personnes .c'est plutot edition/convertir les sauts lignes
mon fichier txt avec separateur ; possède plus de 10 colonnes ou champs
j'arrive à recuperer les colonnes jusqu'à 9 mais a partir de 10 11 ect..le code ne marche plus
je pense que cette variable $11; n'est pas lu correctement mais je ne sais pas comment écrire autrement
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 IFS=';'; while read line; do set -- $line; var1=$1; var2=$11; echo $var2; done < <(tr -d '\r' <ned_ajout.csv)
comme la colorisation du site le montre, le shell interprète $11 comme le contenu de la variable $1 auquel est ajouté le nombre 1.
il faut ajouter des accolades au-delà de 9 : "${10}".
mais pourquoi ne pas utiliser un tableau ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part while IFS=';' read -a ar; do echo "${ar[0]} - ${ar[1]}"; done < fichier
super ca marche avec "${10}"
pourquoi utiliser tableau?
et je ne comprends pas trop cette syntaxe
"${ar[0]} - ${ar[1]}"
c'est plus propre. ça évite de modifier l'IFS pour l'ensemble du script.pourquoi utiliser tableau?c'est comme ça que sont développés les éléments d'un tableau. Ici, les deux premiers éléments, séparés par -.et je ne comprends pas trop cette syntaxe
merci n_bah .ca marche parfaitement le array
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager