I например, использовать двойные негативы при тестировании номеров, чтобы нечетные числа были правильно отклонены:
for number in $(cat all_numbers.txt)
do
if ! [ "$number" -lt 10000000000 ] 2>/dev/null
then
echo "$number = '${#number}'"
fi
done > num.txt
Я немного изменил имена переменных, так как у вас были множественные «числа», относящиеся к каждому отдельному номеру. Этот код имеет единственное значение $number
, чтобы указать каждую итерацию из входного файла. Я также использовал математику, чтобы убедиться, что мы только подсчитываем числа с одиннадцатью цифрами (больше или равными 10000000000), но затем используем тот же расчет переменной длины, что и исходный вопрос, когда дело касается отображения вывода.
Я предполагаю, что вы не хотите переписывать файл каждый раз, поэтому я переместил ваш вывод за пределы цикла.Вы также можете использовать >> num.txt
в конце эхо-строки, но это фактически откроет файл один раз за номер во входном файле, что неэффективно.
Код, который я написал здесь, также совместим с POSIX (нет bashisms, он отлично работает в dash). Обратите внимание, что старые коммерческие UNIX могут жаловаться на цифры, большие, чем 2³¹ (максимальное 32-битное целое число).
Вы пытались добавить пробел между '' и '' ''? –
Да, но я получаю '' '' -bash: [: missing '] '' '' ' – Fshamri
И с пробелом перед закрытием'] '? –