シェルスクリプトの変数に「awk」または「nawk」を代入

シェルスクリプトの変数に「awk」または「nawk」を代入

Solaris および Red Hat システムで実行されるスクリプトがあります。 Solarisでは「nawk」を使用し、Red Hatシステムでは「awk」をテキスト処理ツールとして使用したいと思います。これを行うには、スクリプトに次のコードスニペットがあります。

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

スクリプトを実行すると、次のエラーが発生します。

    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:

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

問題のある他のすべての行(77、79、85、107、108)も$cibi_sperator変数を使用します。私のスクリプトでこの変数をどのように正しく使用できますか?ありがとう、ムラート

答え1

問題を発見しました。パラメータを設定しました。

SYSTEM_OS=`uname -a`

ifドアの前に。ただし、次のように設定する必要があります。

SYSTEM_OS=`uname -s`

ご迷惑をおかけして申し訳ありません。

答え2

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

答え3

私は使用します

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

このように、cibi_seperatorは常に設定され、特別なawkを必要とするオペレーティングシステム(Solarisなど)でのみテストされます。

関連情報