特定のファイルの各行を読み取って、その行に含まれる文字の数に応じて各行を2番目のファイルに送信するスクリプトを作成しようとしています。例えば
私は、以下の情報が含まれている数字と呼ばれるファイルがあります:あなたは私がしようとしていた、それぞれに8つのまたは9の数字で番号を持って見ることができるように
numbers.txt
5196803638
31995500317
5196396080
51999205240
5198158891
をファイル行を読み込んで各番号を特定のファイルに送信するスクリプトを作成します。
!#/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
echo $line
if [ "${#line}"= 8 ]; then
$line> file8.txt
elif [ "${#line}"= 9 ]; then
$line> file9.txt
else
echo "Error"
fi
done < "$1"
しかし、私が得る唯一のものは、以下の
51996803638
My.sh: line 7: [: 11=: unary operator expected
My.sh: line 9: [: 11=: unary operator expected
Error
http://shellcheck.net/このエラーは自動的に発生します。 –
ところで、ループ内でファイル名でリダイレクトするのは非常に効率が悪いです。つまり、8文字の行が表示されるたびに 'file8.txt'を再オープンし、9行目を見るたびに' file9.txt'を再度開きます。 -character lineなどです。ループ外で出力ファイルを開き、複数の書き込みでファイル記述子を再利用する必要があります。 –