У меня есть код ниже (благодаря члену этого сообщества), который ведет себя странно. Когда я жестко кодирую динамическую часть, она работает ... Когда я использую параметры для запуска кода, он ничего не делает. Вот код (с и без переменных), а также выходы (скриншоты)AWK-скрипт перестает работать после добавления переменных оболочки
echo "Attempt A:"
echo "--------------------"
echo "awk -v n=4 '{a[p]=$0; p=(p+1)%n}
/(Something)/{for(i=p;i<p+n-1;i++) print a[i%n];f=1}
f{print}
/\/Interface/{f=0}' file.log | awk 'BEGIN{ORS=RS=\"</Interface>\n -------------------\"}
/name=\"Andy\"/' > AttemptA.txt"
awk -v n=4 '{a[p]=$0; p=(p+1)%n}
/(Something)/{for(i=p;i<p+n-1;i++) print a[i%n];f=1}
f{print}
/\/Interface/{f=0}' file.log | awk 'BEGIN{ORS=RS="</Interface>\n -------------------"}
/Name="Andy"/' > AttemptA.txt
aaid="Andy"
aalog=file.log
echo "-------------------------------------------------------------------------------------------------"
echo "-------------------------------------------------------------------------------------------------"
echo ""
echo ""
echo "Attempt B:"
echo "awk -v n=4 '{a[p]=$0; p=(p+1)%n}
/(Something)/{for(i=p;i<p+n-1;i++) print a[i%n];f=1}
f{print}
/\/Interface/{f=0}' ${aalog} | awk 'BEGIN{ORS=RS=\"</Interface>\n -------------------\"}
/Name=\"${aaid}\"/' > AttemptB.txt"
awk -v n=4 '{a[p]=$0; p=(p+1)%n}
/(Something)/{for(i=p;i<p+n-1;i++) print a[i%n];f=1}
f{print}
/\/Interface/{f=0}' ${aalog} | awk 'BEGIN{ORS=RS="</Interface>\n -------------------"}
/Name="${aaid}"/' > AttemptB.txt
Вот результаты (скриншоты):
Идущие код: http://imgur.com/FEJW5uR
Файлы, созданные: http://imgur.com/NytUL02
Любая идея, почему она распознает все, печатая одни и те же команды, но на самом деле работает, а другая нет?
W.r.t. используя '' $ {aaid} "' вместо '" Andy "' --- похоже, что вы пытаетесь обратиться к переменной оболочки из скрипта awk. У Awk нет доступа к этому. – jas
вы можете вставлять переменную оболочки в awk-скрипт, переключаясь между одиночными кавычками и dbl-кавычками внутри скрипта awk, чтобы «выставить» значение оболочки var внутри скрипта awk, то есть 'awk '/ Name ='" $ {aaid } "'/ ......'' Я добавил пробел между одинарной кавычкой и dbl-цитатой, чтобы выделить эти символы отдельно. Удачи. – shellter
Может ли кто-нибудь из вас ответить как ответ, чтобы я мог отметить его как правильно? Спасибо вам обоим! –