awk
awk
Funktionen ausführen können. Damit bash
Funktionen ausgeführt werden können, müssen Sie awk
eine bash
Shell ausführen , die bash
die Definition dieser Funktion interpretiert und diese Funktion mit dem von awk
übergeben als Argumenten extrahierten Wert aufruft .
Nicht trivial.
bash
unterstützt das Exportieren von Funktionen, damit diese in nachfolgenden Aufrufen von verfügbar sind. Auf diese bash
Weise können Sie die Definition der Funktion an die bash
aufgerufenen übergeben awk
:
export -f d2h
Die einzigen Möglichkeiten awk
, einen Befehl ( bash
hier) auszuführen, sind mit system("cmd")
, oder print... | "cmd"
oder "cmd" | getline
. In allen Fällen awk
läuft eine Shell, um das zu interpretieren, cmd
wird es aber sh
nicht sein bash
. Sie müssen also eine Befehlszeile erstellen sh
, die einen bash
Aufruf darstellt, der eine bash
Befehlszeile zum Aufrufen der Funktion interpretiert. Daher müssen Sie vorsichtig sein, wenn Sie Folgendes angeben:
export -f d2h
<file awk -v q="'" '
function shquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{print $1; system("bash -c '\''d2h \"$1\"'\'' bash " shquote($2))}'
Das bedeutet, dass für jede Zeile eine sh
und eine ausgeführt werden bash
muss, was ziemlich ineffizient sein wird. Das wäre sogar noch ineffizienter als bash
das Lesen und Teilen mit while read loop
:
(unset IFS; while read -r a b rest; do
printf '%s\n' "$a"
d2h "$b"
done < file)
d2h
es sich um eine ausführbare Datei handelt, aber nicht, wenn es sich um eine "in .bashrc oder in Shell-Skript definierte Funktion" handelt.