0
votes

Comment formater une variable du fichier texte à bash?

J'ai été coincé à ce sujet pendant, et j'ai essayé de nombreuses façons mais je ne pouvais pas le faire fonctionner.

Disons que j'ai un fichier texte, avec contenu comme suivez P>

mark_line
variable1
value1
value2
mark_line
variable2
value3
mark_line
variable3
value4
value5
value6
value7
mark_line
...
...
mark_line


4 commentaires

"J'ai essayé de nombreuses façons mais ne pouvait pas le faire fonctionner". S'il vous plaît montrer votre meilleure tentative et expliquer quelles problèmes vous avez avec cela. Sans que nous ne pouvons pas savoir exactement quel aspect du problème que vous rencontrez de la difficulté.


Vous voudrez peut-être jeter un coup d'œil à: Commande EVAL à bash et sa typique utilise


@qtwrk: Vous avez étiqueté votre question par shell , posix et bash . Veuillez vous décider, que vous souhaitiez une solution Bash, ou si vous avez besoin d'un POSIX-Shell-compatible.


@qtwrk: En outre, ce n'est pas clair de votre question, à quel point vous êtes coincé: est-ce que la lecture d'un fichier texte ou s'agit-il de générer de manière dynamique une variable de coque?


3 Réponses :


0
votes

Sorti uniquement par l'obligation de générer une bande de relevés d'affectation (mais n'exécute pas nécessairement lesdites déclarations), nous commencerons par notre exemple de fichier de données:

$ awk '/mark_line/ { printf "\n" ; next } { printf $0" "}' mark_line.dat | \
egrep -v '^$' | \
while read -r myvar myvals
do
    echo "${myvar}=\"${myvals}\""
done

variable1="value1 value2"
variable2="value3"
variable3="value4 value5 value6 value7"
variable4="value8"


2 commentaires

Très cool, j'essayais de lire le numéro de ligne contient "mark_line", créer une boucle pour ces 2 numéros et obtenir la première chaîne "Line_Number +1" en tant que nom de variable, et reste d'entre eux comme des valeurs, mais semble Pour I in {1 ... 3} Contexte ne me permet pas d'utiliser $ {Number} variable dedans, donc j'étais coincé là-bas. Également combiné avec SED pour supprimer variable = "" String vide :)


Si vous avez du code spécifique qui ne se comporte pas, ajoutez cela à la question (par @ Kaylum Commentaire antérieure); Sinon, content de pouvoir aider; Une dernière suggestion, supposant que vous puissiez utiliser cette solution ... Que dois-je faire quand quelqu'un répond à ma question



0
votes

Voulez-vous essayer ce qui suit:

awk -v RS="mark_line\n" -v FS="\n"  '
        /[^[:blank:]]/ {                # skip blank lines
                sub("\n$", "", $0)      # remove trailing newline
                printf("%s=", $1)       # print "variablen=" portion
                str = $2
                for (i=3; i<=NF; i++) str = str " " $i
                print "\"" str "\""     # print "value1 value2 .." portion
        }
' file


0 commentaires

0
votes

Printf peut écrire sur Var, utilisez-le

variable1="value1 value2"
variable2="value3"
variable3="value4 value5 value6 value7"


0 commentaires