ファイル内の行を特定のフィールドで並び替える

#!/bin/sh
#sortkey.sh

. f_askfname.sh
. f_askstring.sh
. f_chknum.sh

ask_filename "Target File( Blank is Cancel. ) : " 1
if [ $? -ne 0 ]; then
    echo "*** Canceled."
    return 1
fi
FILE1=${_STR}
echo "Target File is \"${FILE1}\""

ask_string "Save file [${FILE1}.key] : " 1
if [ $? -ne 0 ]; then
    FILE2="${FILE1}.key"
else
    FILE2=${_STR}
fi
echo "Save File is \"${FILE2}\""

#ソートキーの入力
while : ; do
    ask_string "Sort Key Number( Blank or 0 is END. ): " 1
    if [ $? -ne 0 ]; then
        _STR=0
        break
    fi
    check_num ${_STR}
    if [ $? -eq 0 ]; then
        break
    fi
done
KEYNUM=${_STR}

if [ ${KEYNUM} -eq 0 ]; then
    echo "***Canceled."
else
    echo "Sort Key Filed is \"${KEYNUM}\""

    sort -n -k ${KEYNUM} -o ${FILE2} ${FILE1}
    echo "*** Successful."
fi

unset FILE1 FILE2 KEYNUM _STR
$ cat 1.txt
1 g
2 f
3 e
4 d
5 c
6 b
7 a

$ ./sortkey.sh 
Target File( Blank is Cancel. ) : 1.txt
Target File is "1.txt"
Save file [1.txt.key] : 
Save File is "1.txt.key"
Sort Key Number( Blank or 0 is END. ): 2
Sort Key Filed is "2"
*** Successful.

$ cat 1.txt.key 
7 a
6 b
5 c
4 d
3 e
2 f
1 g