2015-10-20 4 views
-1

В настоящее время я имею сценарий, в котором я звоню AWK какВыполнение сценария AWK из сценария оболочки производит синтаксические ошибки

/usr/bin/nawk -f rst.awk file1 file2 

и rst.awk выглядит

cat rst.awk 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 

в этом случае Мне нужно убедиться, что rst.awk всегда имеет над собой содержимое для запуска скрипта.

Можем ли мы написать содержимое rst.awk в самом скрипте? попробовал сам, но не повезло.

cat te.sh 
/usr/bin/nawk -f 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 
file1 file2 



./te.sh 
/usr/bin/nawk: no program filename 
./te.sh: line 2: syntax error near unexpected token `$2,a,/\./' 
./te.sh: line 2: `{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3]}' 
+0

Что вы попробовали? Потому что я думаю, что это должно сработать. –

+0

Обновить сообщение. Не используйте комментарий. И похоже, что вы просто забыли указать свой аргумент awk script. –

+0

Что значит, что содержание rst.awk не гарантируется неизменным? (Очень легко сделать файлы и их каталоги неназванными, таким образом, «блокировать» содержимое файла.) –

ответ

4

Вы должны te.sh содержать либо из них:

#!/usr/bin/nawk -f 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 

или

/usr/bin/nawk ' 
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] } 
NR==FNR { prev[$1] = curr; next } 
($1 in prev) && (curr > prev[$1]) 
' "[email protected]" 

я настоятельно рекомендую последний. В любом случае вы должны выполнить его как te.sh file1 file2.

btw «Нужна помощь в Awk» - это только худшая строка темы, которую вы могли бы выбрать, не намного лучше, чем «динозавры пахнут смешно» или аналогично бесполезны для кого-то в будущем, ища ответа на аналогичную проблему. Выберите темы, которые фиксируют вашу проблему, например. «Выполнение awk-скрипта из сценария оболочки приводит к синтаксическим ошибкам».

+1

Спасибо, человек :) :) – rKSH

+1

Добро пожаловать и, пожалуйста, подумайте над редактированием вашего вопроса, чтобы предоставить полезную, соответствующую тему темы, чтобы люди с подобная проблема поиска в архивах в будущем дает шанс найти этот Q/A. –

+1

Для одиночных вещей, мое сильное предпочтение - это shebang, так что у меня есть большая свобода использовать любые цитаты, которые я хочу в скрипте. Почему сильная рекомендация использовать цитируемый сценарий, а не shebang? Возможно, если люди привыкли к этому методу, у них будет меньше проблем, если они попытаются интегрировать awk в более крупный сценарий оболочки? – ghoti