Ответ 1
Вы можете использовать его так.
for i in `find $1 -name \*.jar`
do
jar tvf $i| awk -F '/' '/class/{print "'${i}'" " " $NF }' >> $classFile
done
Вы должны использовать
"'$ {я}'"
в AWK, чтобы использовать
$я
создан в Bash Script.
У меня есть script, который выглядит как
#!/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.
То, что я хочу сделать выше, - это распечатать в AWK переменную, называемую "basen", созданную ранее. Но почему-то это не сделало того, на что я надеялся.
Итак, например myfile.txt
содержат эти строки
foo bar bax
foo qux bar
С приведенным выше bash script я надеюсь получить
myfile bax
myfile bar
Какой правильный способ сделать это?
Вы можете использовать его так.
for i in `find $1 -name \*.jar`
do
jar tvf $i| awk -F '/' '/class/{print "'${i}'" " " $NF }' >> $classFile
done
Вы должны использовать
"'$ {я}'"
в AWK, чтобы использовать
$я
создан в Bash Script.
Флаг -v
предназначен для установки переменных из командной строки. Попробуйте что-то вроде этого:
awk -v "BASEN=$basen" '{print BASEN "\t" $3}'
вы можете просто сделать все в awk
awk '{gsub(".txt","",ARGV[1]);print ARGV[1] "\t" $3}' inputfile.txt
Предполагая, что вы запускаете awk в качестве подпроцесса оболочки, которую вы объявили vars
Внутри оболочки
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"];
}'
Результат:
Чтение значений из awk: any
обратите внимание на важность экспорта. При этом считается, что вары из оболочки локальный и не переходит к совместным процессам.
Причина в том, что переменные bash (переменные среды) не разворачиваются в однокасканных строках. Попробуйте заменить
'{print $basen "\t" $3}'
с
"{print \"$basen\" \"\t\" \$3}"
Самый простой способ - сделать awk-переменную. awk -v awkvar=$bashvar 'awkscript'
.