Je voudrais lire différentes lignes d'un fichier texte dans différentes variables. Par exemple
input.txt
:
line1 foo foobar bar
line2 bar
line3 foo
line4 foobar bar
Je veux que ce résultat à stocker dans des variables var1
, var2
, var3
et de var4
telle sorte que
var1=line1 foo foobar bar
var2=line2 bar
etc.
Quelqu'un pourrait-il me dire comment cela se fait? J'ai essayé d'utiliser eval
dans une boucle for. Cela ne semble pas fonctionner.
grep
,cut
, et. Al.), c'est beaucoup mieux de faire juste ce que vous devez faire. Ne pas microgérer dans un script shell; orchestrez les outils pour faire le travail.Réponses:
Vous feriez:
Ou:
(moins efficace que
line
est rarement intégré et la plupart des shells doivent se bifurquer pour implémenter la substitution de commandes.line
n'est plus non plus une commande standard).Pour utiliser une boucle:
Ou pour définir automatiquement les noms des variables comme
line<++n>
:Notez que
bash
prend en charge les variables de tableau et une fonctionreadarray
intégrée pour lire les lignes dans un tableau:Notez cependant que contrairement à la plupart des autres shells, les
bash
indices de tableau commencent à 0 et non à 1 (hérité deksh
), donc la première ligne sera dans${line[0]}
, pas${line[1]}
(bien que comme @Costas l'a montré , vous pouvez fairereadarray
(akamapfile
) commencer à écrire les valeurs à indice 1 (bash
tableaux également contraires à la plupart des autres obus étant clairsemés tableaux ) avec-O 1
).Voir aussi: Comprendre "IFS = read -r line"?
la source
Je proposerais d'utiliser le tableau pour de telles tâches
vous aurez donc chaque ligne
${var[1]}
,${var[2]}
et ainsi de suitela source
Ce n'est pas strictement ce que vous avez demandé, mais cela pourrait répondre à vos besoins. Vous pouvez sérialiser les données avec Awk. Notez que cela se cassera si votre $ 1 n'est pas un nom de variable valide:
Résultat:
la source