O problema foi resolvido na seção de comentários.
Resumo:
Os arquivos, tanto o script quanto possivelmente o arquivo de dados, eram arquivos de texto do DOS. No Unix, isso significa que eles tinham um \r
(retorno de carro) supérfluo no final de cada linha.
Para o script, isso significa que a atribuição de variável
Temp=Kerala
atribuiu o valor Kerala\r
à variável Temp
. Como o arquivo de dados não continha esse valor, nunca foi encontrado.
A execução do script com o valor inserido no lugar da variável funcionou, uma vez que, naquele local nos dados, não foi afetado pelo problema de texto do DOS.
O utilitário dos2unix
deve ser instalado e executado nos dois arquivos para garantir que sejam arquivos de texto Unix. Veja também outras questões neste site relacionadas a este utilitário.
O script também poderia ter sido escrito assim:
#!/bin/sh
Temp='Kerala'
cs1=$( awk -v pattern="$Temp" '$1 ~ pattern { print $NF }' State_list.txt )
printf '%s\n' "$cs1"
Isso elimina grep
e usa awk
em seu lugar para procurar por qualquer linha na primeira coluna do arquivo de dados que contenha pattern
(uma variável atribuída a $Temp
na linha de comando) . Com ==
no lugar de ~
, uma correspondência de cadeia exata é executada em vez de uma correspondência de expressão regular.
O script é um script sh
, uma vez que (e o original) não usa nenhum recurso ksh
especial.