Comment avoir en ksh la liste des elements d'une colonne

Comment avoir en ksh la liste des elements d'une colonne - Shell/Batch - Programmation

Marsh Posté le 28-11-2006 à 14:41:08    

Bonjour,
 
J'ai un fichier csv avec deux colonnes :
 ma valeur 1;toto
 ma valeur 2;titi
 ma valeur 3;tata
 ...
 
J'ai besoin d'extraire chaque ligne de la premiere colonne.
 
J'ai essayé le code suivant :
 
 tbl_Source=`grep "^" $fichier|cut -d";" -f1`
 
 for ligne in $tbl_Source
  do
  #on log chaque ligne
  echo $ligne
 done
 
 
Malheuresement, j'obtient le resultat suivant :
 ma
 valeur
 1
 ma
 valeur
 2
 ...
 
Et non
 ma valeur 1
 ma valeur 2
 ...
 
Je doit me tromper dans la commande utilisée.
 
Avez-vous vous une idée ?
 
Merci pour votre aide

Reply

Marsh Posté le 28-11-2006 à 14:41:08   

Reply

Marsh Posté le 28-11-2006 à 16:56:09    

Il faut positioner IFS à "\n" :

(IFS="\n"; for i in `cut -d\; -f1 txt`; do echo $i; done)


Mais bon, awk est probablement plus adapté.

Reply

Marsh Posté le 29-11-2006 à 09:52:42    

Merci pour votre aide, mais la solution avec awk me fait de renvoi de ligne que sur les "n" :
Exemple pour mon fichier :
 mon avion;1
 ma chaine;2
 
Donne
 mo
  avion
  ma chai
 e
 
J'ai aussi essayé avec awk mais meme resultat :
IFS=$'\n'  
for i in $( awk -F\; '{ print $1 }' $fic_import )  
do  
echo "Ligne : $i \n"  
done  
 
ça me parraissait tout bête à faire mais cela semble vraiment problématique.
 
Je pense que je vais developper en pro*c, là au moins je sais manipuler des fichiers textes.
 
Merci pour votre aide

Reply

Marsh Posté le 29-11-2006 à 10:37:11    

nawk -F';' '{ print $1 }' fichier

 

ou encore avec le awk standard :

awk '{ FS=";" ; print $1 }' fichier

 

sinon y a perl aussi :

perl -n -e '$_ =~ s/;.*// and print $_' fichier

 

ou bien (avec notion de n° de champ) :

 

perl -n -e 'split /;/, $_ ; print "$_[0]\n"  ' fichier


 

 

ou bien, si on aime l'alambiqué :

OLDIFS=$IFS
IFS=
for i in $(cat fichier | cut -d';' -f1)
do
   echo $i
done
IFS=$OLDIFS


Message édité par Elmoricq le 29-11-2006 à 10:52:51
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed