2013-02-22 19 views
8

मैं एक बैश स्क्रिप्ट (script.sh) का उपयोग कर रहा हूं जो उदाहरण के लिए मानों को प्रतिस्थापित करके "रनटाइम" पर बनाए गए विभिन्न अजीब स्क्रिप्ट्स (script1.awk, script2.awk) का उपयोग करता है। मैं पहली बैश स्क्रिप्ट के भीतर उन्हें पूरी तरह एम्बेड करने के तरीकों की तलाश कर रहा हूं। मैं उन्हें एक फाइल करने के लिए लिख सकता हैएक शेल स्क्रिप्ट में अजीब एम्बेडिंग

awk '{ 
my script commands 
' ${intputfile} 
बेशक

, लेकिन पूरी बात करने के लिए नहीं है:

################################ 
# AWK scripts     # 
################################ 
read -d '' scriptVariable <<'EOF' 
' 
{my block commands;} 
' 
EOF 
################################ 
# End of AWK Scripts   # 
################################ 
awk $scriptVariable ${inputfile} # This line obviously doesn't work 
पारंपरिक के बजाय

: आदर्श रूप में, मैं एक फ़ाइल इस तरह लग रही है चाहते हैं । कोई सुझाव ?

संपादित करें: हालांकि कुत्ते के जवाब उत्तर ठीक काम करते हैं, अगली समस्या यह है कि < < 'यहां' टैग के साथ, न्यूलाइन वर्ण पढ़ नहीं पाए जाते हैं। मैं इसे तब से अलग नहीं कर सकता, अन्यथा, वह अजीब स्क्रिप्ट की व्याख्या करने की कोशिश कर रहा है भीतर $ साइन का सामना करना पड़ रहा है (और वहां हैं)। और बिना किसी न्यूलाइन के, मैं अजीब स्क्रिप्ट के भीतर कुछ भी टिप्पणी नहीं कर सकता (जब न्यूलाइन अक्षरों को हटाया जा रहा है तो आधे स्क्रिप्ट पर टिप्पणी किए बिना ...)। किसी को ?

<< 'EOF' 
BEGIN{#Hello 
print $1 
} 
EOF # Is read as BEGIN{#Hello print $1} by awk; ie BEGIN{ 

<< EOF 
BEGIN{#Hello 
print $1 
} 
EOF #Is read correctly by awk but Bash tried to express $1 and fails 
+0

क्या यह 'awk" $ script के साथ काम करता है "$ {inputfile}' – mouviciel

+0

ऐसा लगता है कि आपको बस अपनी स्क्रिप्टिंग भाषा को बेहतर तरीके से अपग्रेड करने की आवश्यकता है - पर्ल या पायथन। यह आसान होगा और तेजी से काम करेगा। – mvp

+0

पहले से ही कोशिश की गई है, यह स्रोत लाइन 1 संदर्भ में 0x\t >>> '<<< awk: स्रोत पंक्ति पर बाहर निकलना 18' –

उत्तर

9

अजीब स्क्रिप्ट के चारों ओर एकल उद्धरण निकालें और स्क्रिप्ट चर को डबल-कोट्स में संलग्न करें। यह मेरे लिए काम करता है:

################################ 
# AWK scripts     # 
################################ 
read -d '' scriptVariable << 'EOF' 
BEGIN { 
    print "start" 
} 
{ 
    print $0 
} 
END{ 
    print "hello" 
} 
EOF 
################################ 
# End of AWK Scripts   # 
################################ 

awk "$scriptVariable" ${inputfile} 
+0

यह है धन्यवाद बहुत बहुत –

+0

खोल पास करने के लिए awk स्क्रिप्ट के वार्स, awk के" -v "विकल्प का उपयोग कुछ की तरह:। **' वर v1 = "खोल मूल्य" awk -v awkVar = " $ v1 "" $ scriptVariable "$ {inputfile} ' ** आपकी स्क्रिप्ट में, 'awkVar' मान "खोल मान" रखेगा – user1435666

0

आप Here-Document का उपयोग करके अपनी बैश स्क्रिप्ट के अंदर अपना अजीब शामिल कर सकते हैं।

+1

उस पर एक टिप, '-f - 'विकल्प का उपयोग करें, जैसे' awk -f - << EOD ! ' – cdarke

2

अजीब स्क्रिप्ट के आसपास एकल उद्धरण एक खोल में cantankerous हो सकता है।

echo dummy code | awk '/dummy/{print '$1' $2}' - another_file | while read LINE; do 
    case $LINE in 
     "$1 code")echo success;; 
     *)echo $LINE;; 
    esac 
done 

यह another_file stdin से निकाल देंगे और उसके बाद और उत्पादन लाइनों डमी युक्त और अपने bash स्क्रिप्ट के पहले तर्क के साथ पहली बार क्षेत्र बदलें। ध्यान दें कि बैश वैरिएबल $ 1 को अनकही होना था।

संबंधित मुद्दे