2010-02-23 6 views
0

J'ai une chose simple à faire, mais je suis novice sous UNIX. Donc, j'ai un fichier et sur chaque ligne j'ai un ID. Je dois parcourir le fichier et mettre tous les ID dans une variable. J'ai essayé quelque chose comme en Java mais ne fonctionne pas.Unix Ksh boucle et mettre le résultat dans la variable

for variable in `cat myFile.txt` 
do 
    param=`echo "${param} ${variable}"` 
done 

Il ne semble pas ajouter toutes les valeurs dans param.

Merci.

Répondre

2

J'utilise:

param=$(<myFile.txt) 

Le paramètre possède un espace blanc (en fait de nouvelles lignes) entre les noms. Lorsqu'ils sont utilisés sans les guillemets, la coquille étendra ceux des espaces, comme dans:

cat $param 

Si elle est utilisée avec des guillemets, les noms de fichiers restent sur des lignes distinctes, comme dans:

echo "$param" 

Notez que la Korn shell spécial-cas la notation '$(<file)' et ne pas fork et exécuter une commande.

Notez également que votre idée originale peut être fait pour travailler plus simplement:

param= 
for variable in `cat myFile.txt` 
do 
    param="${param} ${variable}" 
done 

Cela introduit un blanc à l'avant du paramètre; cela compte rarement. Fait intéressant, vous pouvez éviter le blanc à l'avant en ayant un à la fin, en utilisant param="${param}${variable} ". Cela fonctionne également sans gâcher les choses, bien qu'il semble que cela brouille les choses ensemble. De plus, la notation '${var}' n'est pas nécessaire, même si elle ne fait pas de mal non plus.

Enfin, pour l'instant, il est préférable de remplacer la commande back-tick par '$(cat myFile.txt)'. La différence devient cruciale lorsque vous devez les commandes de nid:

perllib=$(dirname $(dirname $(which perl)))/lib 

vs

perllib=`dirname \`dirname \\\`which perl\\\`\``/lib 

Je sais que je préfère taper (et lire)!

+0

Il semble bien votre morceau de code, mais le même résultat. Je n'ai que la dernière ligne et la moitié de celle d'avant. Qu'est-ce qui ne va pas avec mon fichier txt? –

+0

@CC: fins de ligne CRLF? Comme dans, le fichier vient de DOS, donc ce que vous voyez dans la variable est '' name1 \ rlongername \ rn3' 'avec la sortie montrant simplement' n3nom '. '\ r' représente un retour chariot. –

+0

Je l'ai eu. En fait, mon fichier txt n'était pas au format UNIX. Je viens d'ouvrir le fichier et choisi le format UNIX de mon éditeur. Je suppose qu'il devait y avoir des caractères spéciaux non visibles. Merci beaucoup à tous. –

0

Essayez ceci:

param=`cat myFile.txt | tr '\n' ' '` 

La commande trtr anslates toutes les occurrences de \n (nouvelle ligne) aux espaces. Ensuite, nous assignons le résultat à la variable param.

Belle.

+0

Il manque quelque chose. Dans mon dossier j'ai quelque chose comme ça: ....... AAA_4436188 Dans le param tout ce que j'est 3793536188, donc la dernière ligne et la moitié de la précédente. –

+0

Pouvez-vous poster un extrait plus complet du fichier? –

+0

C'était un fichier DOS avec CR gâcher les choses - voir les commentaires ci-dessous ma réponse. –

0

awk

var=$(awk '1' ORS=" " file) 

ksh

while read -r line 
do 
    t="$t $line" 
done < file 
echo $t 
+0

En fait, pour l'afficher, cela fonctionne, mais je ne peux pas le mettre dans une variable/ Je suis capable d'afficher toute la ligne. –

0
param="$(< myFile.txt)" 

ou

while read line 
do 
    param="$param$line"$'\n' 
done < myFile.txt 
Questions connexes