Flux rss
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

[shell unix] fichier ligne par ligne

jebok, le vendredi 29 juillet 2005 à 14:52:35 
 Signaler ce message aux modérateurs

Bonjour,

comment faire défiler un fichier ligne par ligne, de manière à traiter chaque ligne ?
Merci de votre aide

1

francis, le vendredi 29 juillet 2005 à 15:07:30

ça dépand du traitement mais si lire la ligne pour faire une action

cat FICHIER | while read ligne
do
....
....
#action
....
....
done

Répondre à francis

2

UNIX/VI/SHELL, le samedi 15 juillet 2006 à 15:42:46

Salut

J'espere que je réponds pas trop tard mais je viens de voir ton message.

Tu peut utiliser aussi la commande more:

$: more test
Bonjour
--More--(82%)
Appuie sur Entrer pour afficher le reste du fichier.

------------------------------------

UNIX/VI/SHELL

Répondre à UNIX/VI/SHELL

3

jipicy, le samedi 15 juillet 2006 à 17:58:35

Salut,

J'espere que je réponds pas trop tard mais je viens de voir ton message.
Ben si un peu quand même ;-))

Et puis la solution a été donnée par "francis" dans le post #1.
Cen n'est pas un affichage ligne par ligne qui est demandé, mais un "traitement" ligne par ligne, ce qui a très bien été expliqué par "francis" dans son exemple.

;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

kelux, le samedi 15 juillet 2006 à 18:11:21
  • +4

Encore quelques jours et c'était un an pile de retard !

Ah oui le mode asynchrone c'est gênant des fois...un an apres c'est pas mal quand meme :)
Luc L.
[Gentoo Is Good]

Répondre à kelux

5

darkukai, le mercredi 22 novembre 2006 à 15:25:41

Hi hi hi excellent le retour de la réponse d'outre tombe un an plus tard :)

bon du coup ce petit re-up du post me convient bien parceque j'ai le même problème si ce n'est que le mien est un peu plus pointu
j'ai un fichier .csv suivant :
riri rara roro
toto tata titi
lili lala lolo

j'aimerai lire ligne par ligne ce fichier dans une boucle pour
au premier passage mettre
variable1=riri
variable2=rara
variable3=roro
2ème passage:
variable1=toto
variable2=tata
variable3=titi
etc...

j'ai reussi a créer la boucle qui va bien pour passer de ligne en ligne comme suit :

while read ligne
do
i=$i+1
echo $i
# Définition des variables à partir du fichier list.csv
#-F ";"

awk '{print $1}' > init_prenom
init_prenom=$(cat init_prenom)
echo $init_prenom

awk '{print $2}' > prenom
prenom=$(cat prenom)
echo $prenom

awk '{print $3}' > nom
nom=$(cat nom)
echo $nom
done < $fichier
done


mais ma command awk semble ne pas fonctionner car elle ne me sort aucune valeur du fichier :(

si quelqu'un a une idée ??

merci d'avance

ps : je sais que mon script est tout pourri donc pas de remarque sur l'optimisation c'est juste un truc dont je suis censé me servir une fois pour remplir un annuaire ldap ... avec plein de titi toto lala lili bref je m'amuse :)

Répondre à darkukai

6

jipicy, le mercredi 22 novembre 2006 à 19:32:13
  • +2

Salut,

Essaie ça :

[jp@MDK tmpfs]$ cat fich.txt

riri rara roro
toto tata titi
lili lala lolo

[jp@MDK tmpfs]$ cat new.sh

#!/bin/bash

while read ligne
do
set $(echo $ligne)
init_prenom=$(eval echo $1)
prenom=$(eval echo $2)
nom=$(eval echo $3)
echo -e "variable1=$init_prenom\nvariable2=$prenom\nvariable3=$nom\n"
done < fich.txt

[jp@MDK tmpfs]$ sh new.sh

variable1=riri
variable2=rara
variable3=roro

variable1=toto
variable2=tata
variable3=titi

variable1=lili
variable2=lala
variable3=lolo

[jp@MDK tmpfs]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

7

darkukai, le jeudi 23 novembre 2006 à 08:28:01

OUuuaaaaAAAa

C'est génial çà marche super au poil :) :)

merci vraiment merci

je suis pas un développeur ( nooonnn sans déconner :) ) et j'ai passer toute l'aprem d'hier a essayer de me dépatouiller avec awk sans résultat

encore merci de ton aide
@Bientot

Répondre à darkukai

8

truky, le mercredi 23 mai 2007 à 15:30:29

Je sais que ca remonte a 2006 mais pour les prochains lecteurs

ben che pas si vous aimez le truc compliqué mais j'ai

while read a b c
do
echo "$a $b $c"
done < fichier.txt


tou simplement

bye

Répondre à truky

9

Ibrahim, le vendredi 13 juillet 2007 à 11:40:03

Qui a une idée de comment utilise la boucle for avec le shell unix Merci

Répondre à Ibrahim

10

visiteur, le jeudi 20 septembre 2007 à 12:22:20

Le sujet date de plus de deux ans maintenant, la reponse de celui qui l'a initié a été un an plus tard, pourtant moi au jour d'aujourd'hui en 2007 ça me sert ce sujet, et null doute que des personnes qui auront besoin de ce sujet seront enthousiasmées de trouver cette solution, des années aprés et pourquoi pas des décennies aprés, vue qu'Internet est devenu le seul outil immortel que l'homme ait inventé.

Je tiens quand même a remercier les personnes qui ont initiées ce sujet, et celles et ceux qui ont apportées leurs contributions.


Bien à vous.

Répondre à visiteur

16

dam, le mardi 29 avril 2008 à 22:43:03

Merci ca sert encore et encore.

Répondre à dam

11

lami20j, le jeudi 20 septembre 2007 à 12:29:41

Et ça va servir encore l'année prochaine, et ainsi de suite..... :-)) lami20j

Répondre à lami20j

12

Petrio42, le vendredi 30 novembre 2007 à 15:36:03

Bonjour,

Dans un dossier se trouver des fichiers. J'aimerais trouver une commande en shell qui me permetterer de supprimer les fichier qui date de plus de deux jour(Pour savoir je vais comparer la date de creation du fichier depuis 1970 et le jour que nous somme depuis 1970). Comme le nombre de fichier dans le dossier est variable (car il s'agit du dossier recuperant les fichier uploader) je pense faire une boucle mais je sai pas du tout comment faire quelqu'un pourait-il m'aider.

Voila se que j'ai commencer a faire

#!/bin/sh

datecre=`stat -c $Y /var/www/html/upload/files/* #met en variable le nombre de seconde du fichier depuis 1970`

nbdefichier=`find /var/www/html/upload/files/ -type f | wc -l`#donne le nombre de fichier dans le dossier

seconde1970=`date +%s` #met le nombre de seconde en variable depuis 1970

((jour1970=$seconde1970/86400)) #on converti les sec en heur

((jourfichier=$datecre/86400)) #on fait pareil pour les fichiers dans le dossier

echo "nous avons $nbdefichier dans le dossier"
echo "Date de creation des fichiers dans le dossier = $jourfichier"
echo "Jour depuis 1970 = $jour1970"

Voila se que j'ai commencer a faire tout cela marche bien quant il n'y a qu'un seul ficiher il me donne bien sa date en jour depuis 1970 mais des que j'en rajoute plus rien ne marche je pense mettre une boucle mais je ne sais pas comment faire .

Merci d'avance

Répondre à Petrio42

13

jipicy, le vendredi 30 novembre 2007 à 15:40:51

Salut,

Voir la FAQ : Comment lire un fichier ligne par ligne

;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

Petrio42, le vendredi 30 novembre 2007 à 15:47:44
  • +2

Merci pour cette reponse rapide je vais regarder un peu tout sa

Répondre à Petrio42

15

dubcek, le vendredi 30 novembre 2007 à 15:51:19
  • +3

La commande find fait la boucle toute seule
find . -type f -ctime +2 -print
ajouter, pour supprimer les fichiers:
-exec rm {} \;
sinon une boucle en sh:
for N in liste_de_fichier
do
...
done

Répondre à dubcek

17

lol, le mercredi 20 août 2008 à 19:42:20

Super post bien marrant !!

il persiste ! Merci ca sert encore !

et + 1 année :)

Répondre à lol

18

toto, le samedi 18 octobre 2008 à 23:00:07

Bonjour,

Dans fichier_entree.txt, j'ai la ligne suivante :

[...]
IFS=$'\n'
[...]

Et quand je lance le script :

[...]
cat fichier_entree.txt | while read ligne; do
echo ${ligne} >> fichier_sortie.txt
done
[...]

le script retire le caractère '\' dans le fichier de sortie :
[...]
IFS=$'n'
[...]

Comment faire pour recopier strictement la ligne du fichier_entree.txt dans fichier_sortie.txt ?

Répondre à toto

19

ptiso, le jeudi 20 novembre 2008 à 17:30:52

ça sert ENCORE !

Répondre à ptiso

20

kobal, le jeudi 18 décembre 2008 à 09:34:49

Voici un petit script que j'ai créé grâce à ce fil -décidemment- très utile.

Il prend une playlist et un repertoire en entrée et copie les fichiers de la playlist dans le repertoire. Tout ça parceque Rhythmbox ne le fait pas tout seul.

#!/bin/sh

if [ $# -eq 2 ]
then
	FILE=$1
	DIR=$2	
else
	echo "$# arguments found, 2 expected."
	echo "Usage: m3ucp M3U_FILE DESTINATION_DIR"
fi

if [ -f $FILE ]
then
	if [ -d $DIR ]
	then
		cat $FILE | while read ligne
		do
			cp "$ligne" "$DIR"	
			echo "Copie de $ligne effectuee"
		done
	else
		echo "$DIR est introuvable"
	fi
else
	echo "$FILE est introuvable"
fi

Répondre à kobal

21

boop, le mardi 13 janvier 2009 à 15:45:03

2009 ce fil est encore très utile!!

merci a tous !!

Répondre à boop

22

Alris, le mardi 19 mai 2009 à 14:49:33

Je plusoie!

Répondre à Alris

23

dublin, le mardi 26 mai 2009 à 15:36:28

Bonjour

Ce cas est un peu différent...
J'ai un répertoire dans lequel je peux avoir jusqu'à 10 000 fichiers dont les noms se ressemblent
F09782467
F09548942
F09452118
...

Je voudrais récupérer le nom de chaque fichiers 1 à 1 dans une variable pour en faire un traitement.

num=`ls |wc -w` #je compte le nb de fichiers

for i in num
do
#récupérer le 1er fichier du répertoire
php -q $fich (...)
rm -f $fich
done

Répondre à dublin

24

pidjean, le lundi 8 juin 2009 à 16:18:50

Bonjour
Voila je veux lire le fichier printed.log ligne par ligne et récuperer une valeur sur une autres serveur par un rsh ( pas de ssh sur cette machine).
Cela ne fonctionne que pour la premiere ligne.
Si je retire la ligne contenant rsh le fichier est bien lu en entier.

merci par avance et que ce post vive encore longtemps


while IFS=, read destination propri id
do
echo $id
submitt=`rsh serveurid pdls -r heure-soumission -U serveurid:$id |awk -F "'" ' {print$2}'`
echo $submitt
done < ./printed.log

Répondre à pidjean

25

dubcek, le lundi 8 juin 2009 à 16:28:41

Essayer avec
submitt=`rsh serveurid pdls -r heure-soumission -U serveurid:$id |awk -F "'" ' {print$2}' < /dev/null`

Répondre à dubcek

26

pidjean, le lundi 8 juin 2009 à 17:31:52

Toujours le même problême .

Répondre à pidjean
Exercice shell script (supprimer lignes) Bonjour, Encore un exercice coriace dont je n'arrive pas à me défaire (ca me démoralise), voila l'énnoncé : Écrire un script shell enlever-des-lignes.sh qui prend en premier paramètre un nom de fichier puis une liste d’entier. Ce script doit renvoyer... www.commentcamarche.net/forum/affich-2965755-exercice-shell-script-supprimer-lignes
Comment lire un fichier ligne par ligne Comment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier... www.commentcamarche.net/faq/sujet-5027-comment-lire-un-fichier-ligne-par-ligne
[shell/unix] date de la veille (Résolu) Bonjour, Quelle commande (en shell-UNIX) permet d'afficher la date de la veille ? PS : je précise que c'est pour un script en ksh Merci de votre aide www.commentcamarche.net/forum/affich-1712296-shell-unix-date-de-la-veille
Guide d'utilisation du Shell pour débutantSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface... www.commentcamarche.net/faq/sujet-4801-guide-d-utilisation-du-shell-pour-debutant
Sed - Supprimer une ou plusieurs lignes d'un fichierSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la... www.commentcamarche.net/faq/sujet-4839-sed-supprimer-une-ou-plusieurs-lignes-d-un-fichier
Transformer des colonnes en lignes dans un fichierDifférents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc. Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en... www.commentcamarche.net/faq/sujet-13380-transformer-des-colonnes-en-lignes-dans-un-fichier
[shell] fin de ligne (Résolu)Bonjour, J'ai un doute sur mon script... Avec un while read, je lis un fichier ligne par ligne, et chaque ligne caractère par caractère, et je voudrais qu'à chaque fois que j'arrive en fin de ligne, effectuer des opérations spéciales. (dans mon cas... www.commentcamarche.net/forum/affich-4749412-shell-fin-de-ligne
[Shell Unix] Copier/Déplacer, questionBonjour, tout d'aord merci pour votre temps. je suis loin d'être expert en shell Unix, et j'ai un petit questionnement. j'utilise actuellement la commande cp -rf /data0/test/ftp_clients/pascal/images/* /data0/test/_content/images/waiting/toresize/... www.commentcamarche.net/forum/affich-2476815-shell-unix-copier-deplacer-question
Shell Unixbonjour je ne retrouve plus comment concaténer 2 chaines de caracteres en shell unix sh par exemple pour concaténer la date et le nom d'un fichier dc sans utiliser awk ou autres merci de vos reponses www.commentcamarche.net/forum/affich-2885369-shell-unix
UNIX - Les fichiersIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de... www.commentcamarche.net/contents/unix/unix-fichiers.php3
Systèmes UNIX - Le shellIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système... www.commentcamarche.net/contents/unix/unix-shell.php3
Introduction aux systèmes UNIXLe système UNIX Le système Unix est un système d'exploitation multi-utilisateurs, multi-tâches, ce qui signifie qu'il permet à un ordinateur mono ou multi-processeurs de faire exécuter simultanément plusieurs programmes par un ou plusieurs... www.commentcamarche.net/contents/unix/unixintro.php3