2012-12-06 6 views
-4

Является ли ошибка, которую я получаю каждый раз, когда я скомпилирую свой файл, ошибка ссылается на строку 7, где я объявляю функцию main(). ФункцияМоя основная функция объявлена ​​как

моей основной объявляется, как

Int основных (INT ARGC, символ * ARGV []) Кто-нибудь знает, что является причиной этого?

всякая помощь очень ценится.

линия 1-6 является

+0

Было бы более полезно, если бы вы разместили образец ввода и ожидаемый результат, а не пытались выяснить, что делают ваши команды sed и т. Д. Независимо от того, что вы делаете, я уверен, что это можно сделать в одной тривиальной команде awk. –

+1

Итак, исходный вопрос shell + awk теперь исчез и был заменен полностью несвязанным вопросом C (предположительно). Что за трата времени... –

ответ

0

Не нужно сделать AWK сценария однострочный, чтобы вставить ее в сценарий оболочки. Когда вы используете одиночные кавычки, он автоматически обрабатывает несколько строк.

for ARG in "[email protected]" 
do 
    postcode=`echo "$ARG" | sed -e 's/\(.*\)/\U\1/'` 
    areacode=`echo "$postcode" | sed -e 's/.*\(^[A-Z][A-Z]*\).*/\1/' | sed -e 's/\(.*\)/\L\1/'` 
    awk -v pcode="\"""$postcode""\"" ' 
     BEGIN {FS = ","} 
     {if (pcode == $1){ print $1", " $3", " $4 }} 
    ' < "$areacode".csv 
done 
1

Если я правильно понимаю, что вы пытаетесь сделать это так, у вас есть только один скрипт, а не один сценарий оболочки и один AWK acript, правильно?

Вы можете поместить программу awk в командной строке при вызове awk. Просто поставьте его в одинарные кавычки.

awk 'BEGIN {FS = ","} {if....}' -v pcode="\"""$postcode""\"" < "$areacode".csv 

Тогда у вас нет отдельного файла .awk.

0

Возможно, что-то вроде этого?

for ARG in "[email protected]" 
do 
    postcode=`echo "$ARG" | sed -e 's/\(.*\)/\U\1/'` 
    areacode=`echo "$postcode" | sed -e 's/.*\(^[A-Z][A-Z]*\).*/\1/' | sed -e 's/\(.*\)/\L\1/'` 
    awk -F, -vOFS=, -v pcode="$postcode" \ 
     '$1 == pcode {print $1, $3, $4}' < "$areacode".csv 
done 
0

непроверенные, так как вы не предоставили какой-либо ввод пробы и ожидаемый результат, но это выглядит, как это то, что вы пытаетесь сделать:

awk -v args="[email protected]" ' 
BEGIN { 
    FS = "," 
    OFS = ", " 
    n = split(args,argA) 
    for (i=1; i<=n; i++) { 
     arg = argA[i] 
     match(arg,/[[:alpha:]]+/) 
     areacode = substr(arg,RSTART,RLENGTH) 
     ARGV[++ARGC] = tolower(areacode) ".csv" 
     postcodes[ARGC] = "\"" toupper(arg) "\"" 
    } 
} 
FNR == 1 { pcode = postcodes[++argInd] } 
$1 == pcode { print $1, $3, $4 } 
' 

Если вы используете GNU AWK, то вы можете использовать ARGIND вместо ++ argInd.

Снова трудно сказать без ввода какого-либо образца, но вышеизложенное можно сделать более эффективным, если у вас есть те же самые азакоды и/или почтовые индексы, которые повторяются на вашем входе. В частности, каждый файл isacodes можно искать только один раз для всех почтовых индексов, которые они могут содержать.

Смежные вопросы