2010-01-13 14 views
3

Je suis en train de créer un tableau en bash à partir d'un fichier au format exemple suivant:tableaux de Bash: Besoin d'aide avec un espace blanc

data, data, interesting 
data, data, more interesting 

La façon dont je suis peuplant les tableaux:

read -r -a DATA1 <<< $(cat $FILE | awk -F, '{ print $1 }') 
read -r -a DATA2 <<< $(cat $FILE | awk -F, '{ print $2 }') 
read -r -a DATA3 <<< $(cat $FILE | awk -F, '{ print $3 }') 

Quand je l'examinerai DATA3 de tableau, il y a trois éléments:

interesting 
more 
interesting 

J'ai besoin pour montrer que deux éléments tels que:Comment puis-je préserver l'espace blanc dans le champ 3 alors quand j'appelle cet élément du tableau, il apparaît comme "plus intéressant"? Y a-t-il une meilleure façon de gérer cela?

Répondre

1

Utilisez cut. Exemple:

read -r -a DATA1 <<< $(cut -d, -f 1 $FILE) 
read -r -a DATA2 <<< $(cut -d, -f 2 $FILE) 
read -r -a DATA3 <<< $(cut -d, -f 3 $FILE) 
3

La clé consiste à utiliser les IFS (séparateurs de champs internes) Variable avec read.

read peut lire des mots directement dans un tableau en utilisant l'option -a. Set IFS=, et il coupera à virgule:

while read f; do 
    echo "$f" | (IFS=, && read -a arr && echo ${arr[2]}) 
done 

fera écho

interesting 
more interesting 

Vous pouvez également lire directement dans les noms de variables:

IFS=, && read f1 f2 f2 

EDIT: Je recommande la lecture Advanced Bash Scripting Guide.

1
IFS=',' 
while read -a array 
do 
    echo "${array[2]}" 
done < data.csv 
0
>> Is there a better way to handle this? - Tee Bone 

$ awk -F", " '{print $3}' file 
interesting 
more interesting 
Questions connexes