Ich versuche, das kaufmännische Und-Zeichen von sed zu verwenden, um es durch die ursprüngliche Zeichenfolge zu ersetzen, und dann aus dem Array zu lesen, aber es funktioniert nicht. Ich bekomme nur den Fehler: 'Operand erwartet (Fehlertoken ist "&")'.
Hier ist die entsprechende Codezeile:
gawk -F '\t' '{ print $5"\t"$1"\t"$2"\t"$3"\t"$4 }' $TEMPFILE | sed "s/^[0-9]\+/${CATEGORY[&]}/g"
Die erste Gawk-Anweisung erzeugt am Zeilenanfang eine zweistellige Zahl. Wenn ich das kaufmännische Und in der sed-Anweisung manuell durch diese Nummer ersetze, funktioniert alles. Ich würde mich sehr über Hilfe freuen.
category
Zuordnung.Wie Choroba betonte, besteht Ihr Problem darin, dass Ihre Muschel versucht, sich auszudehnen,
${CATEGORY[something]}
bevor Sie sie an Sed weitergibt.Wenn Sie dies unbedingt mit einer Pipe von awk nach sed tun möchten, ist dies eine Problemumgehung:
awk ... | sed 's/^[0-9]\+/echo ${CATEGORY[&]}/g' | bash
Es funktioniert mit sed, um Shell-Anweisungen zu erstellen, die das Array lesen. Dies funktioniert immer noch nur, wenn das Array exportiert wird.
Sie können es auch versuchen
eval $(awk ... | sed 's/^[0-9]\+/echo ${CATEGORY[&]}/g')
Dies funktioniert auch, ohne dass das Array exportiert wird.
Ich würde keine der beiden Lösungen empfehlen, es sei denn, Sie können 100% sicher sein, dass Ihr sed-Skript keine gefährlichen Befehle erzeugen kann (auch wenn die Eingabe in awk böswillig ist).
quelle
${CATEGORY[foo]}
, wodurch das Skript beschädigt wird (oder ich habe falsch verstanden, was Sie tun möchten). Ich habe einzelne Anführungszeichen verwendet, um dies zu vermeiden, damit sed${CATEGORY[foo]}
wörtlich sehen (und schließlich ausgeben) kann .