2010-06-23 16 views
14

में बनाए गए चर का उपयोग मैं स्क्रिप्ट है कि इसकैसे AWK बनाने के लिए बैश स्क्रिप्ट

#!/bin/bash 
#exampel inputfile is "myfile.txt" 
inputfile=$1 
basen=`basename $inputfile .txt` # create basename 

cat $inputfile | 
awk '{print $basen "\t" $3} # this doesn't print "myfile" but the whole content of it. 

तरह लग रहा है क्या मैं ऊपर क्या करना चाहते हैं चर 'Basen' से पहले बनाए गए बुलाया AWK में बाहर मुद्रित करने के लिए है। लेकिन किसी भी तरह से ऐसा करने में असफल रहा जो मैंने आशा की थी।

इसलिए उदाहरण के लिए myfile.txt

myfile bax 
myfile bar 

यह करने के लिए सही तरीका क्या है पाने के लिए इन पंक्तियों

foo bar bax 
foo qux bar 

ऊपर बैश स्क्रिप्ट मुझे आशा है कि साथ में होते हैं?

उत्तर

12

आप इसे इस तरह उपयोग कर सकते हैं।

for i in `find $1 -name \*.jar` 
do 
jar tvf $i| awk -F '/' '/class/{print "'${i}'" " " $NF }' >> $classFile 
done 

आप

" '$ {मैं}' '

AWK में

उपयोग करने के लिए

$ i

बनाया का उपयोग करना चाहिए बैश स्क्रियर में IPT।

+2

बैकटीक्स के बजाय '$()' का उपयोग करें। और 'लूप' के साथ 'ढूंढें' जैसे रिक्त स्थान वाली फ़ाइलों को तोड़ देगा। अपने '$ 1' वैरिएबल – ghostdog74

2

कारण यह है कि पार्टी चर (वातावरण चर) एकल उद्धृत तार के भीतर का विस्तार नहीं कर रहे हैं।

"{print \"$basen\" \"\t\" \$3}" 
+0

वहां एक मणि है :) धन्यवाद डेविडज़! – Deian

29

-v झंडा कमांड लाइन से चर स्थापित करने के लिए है के साथ

'{print $basen "\t" $3}' 

की जगह की कोशिश करो। कुछ इस तरह का प्रयास करें:

awk -v "BASEN=$basen" '{print BASEN "\t" $3}' 
+2

+1 यह चर का इंजेक्ट करने का सबसे अच्छा तरीका है क्योंकि यह काम करेगा, भले ही '$ बेसन 'में एस्ट्रोफ़ेस, उद्धरण या रिक्त स्थान जैसे विशेष वर्ण हों। –

1

सबसे आसान तरीका एक अजीब चर बनाने के लिए है। awk -v awkvar=$bashvar 'awkscript'

+0

को उद्धृत करें आपको डबलक्वॉट्स के तहत 'awkvar = $ bashvar' डालना होगा, अन्यथा इसमें स्पेस के साथ bashvariables के साथ समस्याएं हो सकती हैं:' awk -v" awkvar = $ bashvar "awkscript ' – syss

4

तुम सिर्फ awk

awk '{gsub(".txt","",ARGV[1]);print ARGV[1] "\t" $3}' inputfile.txt 
3

में सब कुछ मान लिया जाये कि आप खोल के उप प्रक्रिया के रूप में awk चलाने आप वार्स घोषित
खोल के भीतर कर सकते हैं

export MY_VARS="whatever"; #// IT NEEDS to be exported, to allow the sub process awk read access. 
echo ""| awk '{ 
    print "Reading values from within awk : "ENVIRON["MY_VARS"]; 
}' 

परिणाम:

पढ़ना मूल्यों अजीब से: जो भी

निर्यात के महत्व को ध्यान में रखता है। बाहर इसके साथ, खोल से वार्स स्थानीय माना जाता है और सह प्रक्रियाओं के लिए पारित नहीं होती है।

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