[shell unix] fichier ligne par ligne

Résolu/Fermé
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 - 29 juil. 2005 à 14:52
 SinD - 7 févr. 2016 à 21:04
Bonjour,

comment faire défiler un fichier ligne par ligne, de manière à traiter chaque ligne ?
A voir également:

27 réponses

Ouhouu, nickel !
Les 2 solutions (dubcek et jipicy) sont intéressantes pr apprendre comment tt cela fonctionne.
AWK j'ai toujours du mal, mais c'est la solution la plus rapide !

Merci à vous !
0
Bonjour,

Je sais que ce post date deja d'un bon moment.
Mon problème c'est que je veux lire dans un fichier csv, je récupère le nombre de colonne qui m'interesse, ça c'est fait. Et j'ai ce résultat : (c'est un exemple)
rara tata
riri toto
roro titi

Je veux pouvoir comparer les valeurs (rara riri roro) entre elles, si jamais il y'en a deux qui sont égales je passe à la 2ème colonne pour pour comparer.
Le but en résumé, c'est de vérifier qu'il n'y aies pas de doublons, sachant que le nombre de colonnes peux varier.
Quelqu'un aurait une idée SVP.
(Tout ça biensur dans un script shell)
Merci d'avance
0
Salut


for fichier in base.csv
do
while read ligne
do
valeur_a_comparer=`echo $ligne | awk -F ";" '{print $1}'`
' initialisation d'un variable pour savoir sur quelle ligne est la valeur
i = i+1
j = 0
'Deuxième boucle qui passe les valeurs une par une et compare
for fichier2 in base.csv
do
while read ligne
j = j+1
valeur_a_comparer2 =`echo $ligne | awk -F ";" '{print $1}'`
if valeur_a_comparer2 = valeur_a_comparer

then if j != i
then echo "Doublons pour : "$valeur_a_comparer " à la ligne "$j
fi
fi
done < $fichier2
done

done < $fichier
done



Bon je l'ai pas tester en shell mais j'utilise d'habitude ce genre de boucle imbriquer en vb ou vba qui fonctionne assez bien après il serait peut etre plus rapide de travailler avec des tableaux, je sais pas

cordialement,
0
Merci. C'est exactement ce qu'il me fallait.
Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ca marche pas en sh IFS=$'\n'
merci de vérifier ce que vous écrivez
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 sept. 2010 à 17:27
Ah ?

Merci de préciser ton système et ton shell (sh (posix, bourne) ou lien symbolique vers...) !
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 sept. 2010 à 17:32
Salut,

merci de vérifier ce que vous écrivez
Il a vérifié en 2009 ce qu'il a écrit, maintenant c'est à toi de nous montrer ce qui ne va pas en 2010

Sur debian testing fonctionne

lami20j@debian-acer:~$ cat foo.sh 
#! /bin/sh

#set -xv
echo "*********************************"
date
echo "*********************************"
OIFS=$IFS
IFS=$'\n'
for line in $(cat plop)
do
grep -q '^.\{7\}coucou' <<<"${line}"
if [ "$?" != 1 ]
        then
        echo "${line}"
fi
done

lami20j@debian-acer:~$ cat plop 
      * TABLES
      *=======
           @TABCOPY,ABCDEF.
           @TABCOPY,GHIJKLM.
       coucou.
a_2;-:/coucou.
           @TABCOPY,NOPQRS.
           @TABCOPY,TUVWXY.

lami20j@debian-acer:~$ chmod +x -v foo.sh 
le mode de « foo.sh » a été conservé à 0755 (rwxr-xr-x).
lami20j@debian-acer:~$ ./foo.sh 
*********************************
vendredi 24 septembre 2010, 17:31:02 (UTC+0200)
*********************************
       coucou.
a_2;-:/coucou.
0
Que perdure ce post trés utile qui m'a bien aidé
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7
15 juil. 2006 à 15:42
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
-1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
15 juil. 2006 à 17:58
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.

;-))
0
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 ?
-1
ça sert ENCORE !
0