непроверенные, так как вы не предоставили какой-либо ввод пробы и ожидаемый результат, но это выглядит, как это то, что вы пытаетесь сделать:
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 можно искать только один раз для всех почтовых индексов, которые они могут содержать.
Было бы более полезно, если бы вы разместили образец ввода и ожидаемый результат, а не пытались выяснить, что делают ваши команды sed и т. Д. Независимо от того, что вы делаете, я уверен, что это можно сделать в одной тривиальной команде awk. –
Итак, исходный вопрос shell + awk теперь исчез и был заменен полностью несвязанным вопросом C (предположительно). Что за трата времени... –