[shell unix] fichier ligne par ligne
Résolu
jebok
Messages postés
358
Statut
Membre
-
SinD -
SinD -
Bonjour,
comment faire défiler un fichier ligne par ligne, de manière à traiter chaque ligne ?
comment faire défiler un fichier ligne par ligne, de manière à traiter chaque ligne ?
A voir également:
- Shell lire un fichier ligne par ligne
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Partager photos en ligne - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
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 !
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 !
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
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
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,
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,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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.
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
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
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.
;-))
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.
;-))
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 ?
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 ?