Atribuindo “awk” ou “nawk” a uma variável em um script de shell [closed]

2

Eu tenho um script para ser executado nos sistemas Solaris e Red Hat. Eu quero usar "nawk" no Solaris e "awk" nos sistemas da Red Hat como ferramenta de processamento de texto. Para isso, eu tenho um trecho de código como abaixo no meu script:

...
if [ "$SYSTEM_OS" = "SunOS" ]; then
cibi_seperator="nawk"
elif [ "$SYSTEM_OS" = "Linux"  ]; then
cibi_seperator="awk"
fi
...

Quando executo o script, recebo erros de acompanhamento:

    bash-3.00$ ./cibi_awk_both_os.sh 
./cibi_awk_both_os.sh: line 75: -F,: command not found
./cibi_awk_both_os.sh: line 77: -F: command not found
./cibi_awk_both_os.sh: line 77: -F=: command not found
./cibi_awk_both_os.sh: line 77: -v: command not found
./cibi_awk_both_os.sh: line 79: -F,: command not found
./cibi_awk_both_os.sh: line 85: -F,: command not found
./cibi_awk_both_os.sh: line 107: -F,: command not found
./cibi_awk_both_os.sh: line 108: -F,: command not found

75ª linha do script:

$cibi_seperator -F, 'NR==1,NR==2{print $0;}' cibi.csv > section_header.csv

Todas as outras linhas problemáticas (77, 79, 85, 107, 108) usam também a variável $ cibi_seperator. Como usar essa variável corretamente no meu script? Obrigado, Murat

    
por Murat 26.08.2015 / 09:45

3 respostas

1

Descobri o problema: Eu defino o parâmetro:

SYSTEM_OS='uname -a'

antes da instrução if. Considerando que eu deveria ter configurado para:

SYSTEM_OS='uname -s'

Desculpe pelo transtorno.

    
por 26.08.2015 / 09:58
0
case "$SYSTEM_OS" in
(SunOS)
    cibi_separator=nawk;;
(Linux)
    cibi_separator=awk;;
(*)
    echo "[$SYSTEM_OS] unsupported"; exit 1;;
esac

...

$cibi_separator -F, 'NR==1,NR==2{print $0;}' cibi.csv > section_header.csv
    
por 26.08.2015 / 09:53
0

Eu teria usado

cibi_seperator="awk" # general case, use plain awk

if [ "$SYSTEM_OS" = "SunOS" ]; then
cibi_seperator="nawk"
elif [ "$SYSTEM_OS" = "fooOS"  ]; then
cibi_seperator="/bin/special/awk"
elif ...
fi

Desta forma, o cibi_seperator é sempre configurado, o teste é feito apenas para o SO que precisa de um awk especial (como o solaris).

    
por 26.08.2015 / 11:19