Linux: compter le nombre de caractères dans une ligne avec séparateur

Linux: compter le nombre de caractères dans une ligne avec séparateur - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 18-11-2014 à 13:15:12    

Bonjour :)
 
J'ai besoin de récupérer les données de colonnes d'un fichier afin de pouvoir les "variabiliser" et les utiliser dans un autre script (je récupère ligne par ligne).
Je n'ai pas de soucis pour ca, à l'aide de grep, awk ou cut (surtout des cut d'ailleurs) je m'en sors plutot pas trop mal (jusqu'à aoujourd'hui) mais le problème c'est que la longueur des colonnes peut changer.
 
Mon fichier se présente sous la forme suivante:
 
Client                  Ville                                                                code postal
----------------- ------------------------------------------------- ------------
Marcel dupont      Brest                                                               29200
Ginette dupuis      Saint-Remy-en-Bouzemont-Saint-Genest-et-Isson   51290
 
 
Or si Ginette disparait de la liste mon fichier va devenir:
 
Client                 Ville        code postal
----------------- -------- ------------
Marcel dupont      Brest      29200
 
 
 
Ce que je voudrais faire c'est compter le nombre de "-" en dessous des noms de colonnes (Client, Villes et Code postal) pour pouvoir utiliser ma commande cut en fonction du nombre de caractères.
 
 
Dans le cas de mon fichier 1 j'aurai donc:
 
Client=17
Ville=47
CP=12
 

nbr_caract_ville=`expr 17 + $Ville`
 
soit:
VILLE1=$(cat $fichier1 | cut -c 18-${nbr_caract_ville} )
 
Ce qui donne:
VILLE1=$(cat $fichier1 | cut -c 18-65 )
 
 
Et pour mon fichier 2:
Client=17
Ville=8
CP=12
 
 
VILLE1=$(cat $fichier1 | cut -c 18-26 )
 
 
Je sais compter le nombre de caractère dans une ligne mais comment faire pour compter chaque champ avec comme séprarateur un espace ?
 
 
Merci !!

Reply

Marsh Posté le 18-11-2014 à 13:15:12   

Reply

Marsh Posté le 18-11-2014 à 14:04:24    

Truc à l'arrache je dirais tu récupère la ligne de tirets dans une variable couplé à une boucle for  
for i in var; do wc -c $i; done


---------------
http://lacabanedeladmin.trickip.net/
Reply

Marsh Posté le 18-11-2014 à 15:28:38    

Tout simplement :)
 
compteur=1
for i in `cat $DD_TMP/fichier.txt`
do
  echo $i > $DD_TMP/fichier.tmp
  export valeur${compteur}=`wc -c $DD_TMP/fichier.tmp | awk -F " " ' { print $1 } '`
  compteur=`expr $compteur + 1`
done
 
(je suis obligé d'exporter mon $i dans un fichier because le wc -c sur une variable il n'aime pas des masses).
 
Y'a surement plus simple mais au moins ca marche !!
 
Merci Kisscoolz :) :) :)

Reply

Marsh Posté le 18-11-2014 à 16:20:30    

Tu l'as placé où ta variable ? Parce que dans un tube ca passe bien  
 
var=blahblah
$ echo -n $var | wc -c
8
 


---------------
http://lacabanedeladmin.trickip.net/
Reply

Marsh Posté le 19-11-2014 à 00:24:26    

salut,
 
de là où je suis, je compte 49 tirets sous «Ville» !?
 
je ne comprends pas très bien ta requête : quel doit être le format de sortie si tu retires «Ginette» du fichier ?
 
ça ressemble à un fichier à champs de longueurs fixes, qui sera très bien traité avec `gawk' grâce à la variable `FIELDWIDTHS', que tu peux construire en comptant (`length()') le nombre de caractères des champs de la deuxième ligne du fichier.

Reply

Sujets relatifs:

Leave a Replay

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