Salut Besoin d'un script shell pour analyser le fichier csv - ligne par ligne puis champ par champ]
le fichier ressemblera à ceci
X1,X2,X3,X4
Y1,Y2,Y3,Y4
J'ai besoin d'extraire chacun de ces X1, X2 ....
J'ai écrit un script mais il échoue si la ligne dépasse une ligne.
Voici comment je le ferais.
Tout d’abord, j’ai défini la variable d’environnement IFS pour indiquer à read
que "," est le séparateur de champ.
export IFS=","
Étant donné le fichier "input" contenant les données que vous avez fournies, je peux utiliser le code suivant:
cat test | while read a b c d; do echo "$a:$b:$c:$d"; done
Pour récapituler rapidement ce qui se passe ci-dessus. cat test |
lit le fichier et le redirige vers while
. while
exécute le code entre do
et done
pendant que read
renvoie true. read
lit une ligne à partir de l'entrée standard et la sépare en variables ("a", "b", "c" et "d") en fonction de la valeur de $ IFS. Enfin, echo
n'affiche que les variables lues.
Ce qui me donne la sortie suivante
X1:X2:X3:X4
Y1:Y2:Y3:Y4
BTW, le BASH manuel est toujours une bonne lecture. Vous apprendrez quelque chose de nouveau chaque fois que vous le lirez.
Depuis que eykanal a mentionné AWk et et sed
, je pensais montrer comment vous pouvez les utiliser.
awk -F, 'BEGIN{OFS="\n"}{$1=$1; print}' inputfile
ou
sed 's/,/\n/' inputfile
Ensuite, un script Shell pourrait traiter leur sortie:
awk_or_sed_cmd | while read -r field
do
do_something "$field"
done
Bien sûr, vous pouvez effectuer le traitement dans le script AWK:
awk -F, '{for (i=1;i<=NF;i++) do_something($i)}' inputfile
ls -l
vi fichier.sh
#! bin/sh
echo "INPUT PATTERN"
chat> test (saisir les données et les sauvegarder)
test de chat | en lecture (entrée); (ex: "$ a: $ b: $ c: $ d");
terminé
echo "motif affiché comme" $ a: $ b: $ c: $ d "\ n"
sortie (0;);