Не волнуйтесь об использовании других дисплеев сначала. Вероятно, единственное время, которое необходимо будет взволновать по поводу дисплеев, - когда Вы соединяетесь с удаленным компьютером и подключаете свои удаленные приложения к дисплею.
Ваши приложения, которые Вы пишете, не должны будут непосредственно волноваться о дисплее; X библиотек будут заботиться о нем для Вас.
В то время как теговый удар самое простое к read
это в массив:
bash-4.1$ read -a l < file
Затем можно выполнить итерации по значениям как это:
bash-4.1$ for n in "${l[@]}"; do echo "$n / 1024 ≈ $((n/1024)) = $(bc -l<<<"$n/1024")"; done
4096 / 1024 ≈ 4 = 4.00000000000000000000
1230 / 1024 ≈ 1 = 1.20117187500000000000
4560 / 1024 ≈ 4 = 4.45312500000000000000
1024 / 1024 ≈ 1 = 1.00000000000000000000
Пока данные являются пространством, разграничил Вас, может загрузить содержание файла в массив как так:
arr=$(< data.txt)
Однажды данные, загруженный в массив, $arr
можно затем использовать a for
цикл, чтобы пройти его и выполнить Ваше подразделение 1 024.
$ for num in ${arr[*]}; do
res=$( expr $num / 1024 )
echo "$num / 1024 = $res"
done
$ for num in ${arr[*]}; do res=$( expr $num / 1024 ); echo "$num / 1024 = $res";done
4096 / 1024 = 4
1230 / 1024 = 1
4560 / 1024 = 4
1024 / 1024 = 1
Если требуется получить результаты с плавающей точкой в противоположность целым числам, можно использовать bc
сделать это вместо этого:
$ for num in ${arr[*]}; do
res=$(echo "scale=2; $num/1024" |bc)
echo "$num / 1024 = $res"
done
4096 / 1024 = 4.00
1230 / 1024 = 1.20
4560 / 1024 = 4.45
1024 / 1024 = 1.00
Можно управлять количеством десятичных разрядов путем изменения значения, переданного scale=
. Установка `scale=5
:
4096 / 1024 = 4.00000
1230 / 1024 = 1.20117
4560 / 1024 = 4.45312
1024 / 1024 = 1.00000
Для этой простой арифметической задачи можно придерживаться для окружения встроенных конструкций и вызова read
чтобы читать и разделить первую строку или использование управляют, чтобы замена считала вход и разделила его.
С другой стороны, можно рассматривать это как проблему обработки текста и вызов awk
сделать целую обработку.
Если Ваша фактическая задача требует передачи каждого числа к отдельной команде, можно использовать xargs
. xargs
имеет странный формат ввода, но если Ваш вход не имеет ни одного из \'"
Вы не должны волноваться об этом.
<input.txt xargs -n1 somecommand
Суть сценариев оболочки должна выполнить как можно меньше команд. Здесь, awk
обычно команда, которая лучше всего разработана, чтобы разделить строки на поля и сделать арифметику:
awk '{for (i = 1; i<= NF; i++) $i = $i/1024; print}' < your-file
Используя циклы оболочки в оболочках часто знак плохой практики сценариев оболочки.
Для больших списков я обычно создаю в противоречии с, отрывают одну строку за один раз, затем независимо от того, что переменная операция, которую Вы хотите выполнить, может быть сделана надежно.. У меня были большие массивы (для строки в cat foo.bar
; сделайте), переходят к частям.. К остроумию:
InCt=`cat foo.bar|wc -l`
RunCt=1
while [ $InCt -ge $RunCt ]; do
LINE=`head -${RunCt} foo.bar|tail -1`
# do whatever you need with the line
let RunCt="$RunCt +1"
done
head
и tail
однажды на строку напрасно устраняет вход non-seekable (например, канал) и является очень медленным для средних и крупных файлов.
– Gilles 'SO- stop being evil'
10.11.2013, 21:28