Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/07/2016, à 14: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 ';'    sad

Merci d'avance !

Hors ligne

#2 Le 21/07/2016, à 14: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, à 14:16)

Hors ligne

#3 Le 21/07/2016, à 15: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 smile

Hors ligne

#4 Le 21/07/2016, à 15: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, à 16: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