[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
SinD - 7 févr. 2016 à 21:04
A voir également:
- Shell lire un fichier ligne par ligne
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Fichier rar - Guide
- Aller à la ligne excel - Guide
- Apparaitre hors ligne instagram - Guide
- Vente en ligne particulier - 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
ca marche pas en sh IFS=$'\n'
merci de vérifier ce que vous écrivez
merci de vérifier ce que vous écrivez
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
24 sept. 2010 à 17:27
Ah ?
Merci de préciser ton système et ton shell (sh (posix, bourne) ou lien symbolique vers...) !
Merci de préciser ton système et ton shell (sh (posix, bourne) ou lien symbolique vers...) !
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
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
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.
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
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
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
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
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.
;-))
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 ?