awk
awk
कार्य चला सकते हैं । bash
फ़ंक्शंस को चलाने के लिए , आपको awk
एक bash
शेल निष्पादित करना होगा , जो bash
उस फ़ंक्शन की परिभाषा की व्याख्या करने के लिए, और उस फ़ंक्शन को कॉल करें, awk
जिसे तर्कों के रूप में निकाले गए मान के साथ निकाला जाए ।
तुच्छ नहीं।
bash
निर्यात कार्यों का समर्थन करता है इसलिए यह बाद के इनवोकेशन में उपलब्ध है bash
, इसलिए यह फ़ंक्शन की परिभाषा को bash
इनवॉइस द्वारा पास करने का एक तरीका है awk
:
export -f d2h
केवल तरीकों के लिए awk
एक कमांड (निष्पादित करने के लिए bash
यहाँ) के साथ अपने हैं system("cmd")
, या print... | "cmd"
या "cmd" | getline
। सभी मामलों में, awk
व्याख्या करने के लिए एक शेल चलाता है cmd
, लेकिन यह होगा sh
, नहीं bash
। तो आपको इसके लिए एक कमांड लाइन बनाने की आवश्यकता है, sh
जो कि एक bash
इनवोकेशन है जो bash
फ़ंक्शन को लागू करने के लिए कमांड लाइन की व्याख्या करती है, इसलिए आपको उद्धरण के साथ सावधान रहने की आवश्यकता है:
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))}'
इसका मतलब है कि प्रत्येक पंक्ति के लिए एक sh
और एक चल रहा है bash
, इसलिए काफी अक्षम है। यह bash
पढ़ने और विभाजन के साथ होने की तुलना में बहुत अधिक अक्षम होने का अंत होगा while read loop
:
(unset IFS; while read -r a b rest; do
printf '%s\n' "$a"
d2h "$b"
done < file)
d2h
एक निष्पादन योग्य था, लेकिन यह नहीं कि यह "फ़ंक्शन या तो .bashrc या शेल स्क्रिप्ट में परिभाषित है"।