#1 Le 21/07/2016, à 13:03
- Docteur Opacho
[Shell/Batch] Récupérer le dernier "bloc" de chaque ligne d'un fichier
Posté le 21-07-2016 à 13:49:58 profileditEdition rapideansweranswer +Favoris
Prévenir les modérateurs en cas d'abus
Bonjour,
Voici mon problème, j'ai un fichier .csv du type:
*********
Nom;Prénom;age
Jeanne;blabla;45
Isabelle;blabla;13
Paul;blabla;8
ligne vide
*********
Je souhaite récupérer sous forme de variable les derniers blocs concaténés. Dans notre cas nous aurions la variable concat = 45 13 8
En gros je veux récupérer les derniers blocs de chaque ligne, et les assembler en mettant un espace entre chaque caractère.
N'ayant jamais programmer en shell je suis un peu bloqué avec la commande awk.
Par exemple awk 'BEGIN {FS = ";"} ; END { print $NF }' fichier.csv ne me retourne que le dernier bloc du fichier (ligne vide ou 8 si je la supprime).
Par contre la commande awk '{ print $NF }' fichier.csv me récupère bien l'ensemble des lignes, mais sans prendre en compte le séparateur de champs ';'
Merci d'avance !
Hors ligne
#2 Le 21/07/2016, à 13:13
- pingouinux
Re : [Shell/Batch] Récupérer le dernier "bloc" de chaque ligne d'un fichier
Bonjour,
$ awk -F";" -v ORS=" " 'NR>1 && NF{ print $NF }END{printf "\n"}' fichier.csv
45 13 8
Ajouté :
Et pour mettre le résultat dans une variable
$ concat=$(awk -F";" -v ORS=" " 'NR>1 && NF{ print $NF }' fichier.csv)
$ echo "$concat"
45 13 8
Dernière modification par pingouinux (Le 21/07/2016, à 13:16)
Hors ligne
#3 Le 21/07/2016, à 14:01
- Docteur Opacho
Re : [Shell/Batch] Récupérer le dernier "bloc" de chaque ligne d'un fichier
Merci pour ton aide!
J'ai également réussi à trouver le résultat souhaité avec la commande awk 'BEGIN { FS=";"; ORS=" "}{if (NR!=1) {print $NF}}'
Bonne fin d'après midi
Hors ligne
#4 Le 21/07/2016, à 14:24
- credenhill
Re : [Shell/Batch] Récupérer le dernier "bloc" de chaque ligne d'un fichier
hello
si le champ contient toujours des chiffres
$ v=$(grep -Eo "[0-9]+$" fichier.csv); echo $v
45 13 8
Hors ligne
#5 Le 21/07/2016, à 15:54
- pingouinux
Re : [Shell/Batch] Récupérer le dernier "bloc" de chaque ligne d'un fichier
Un peu plus simple que #2
concat=$(awk -F";" 'NR>1 && NF{ printf("%s ",$NF) }' fichier.csv)
Hors ligne