Как вы получаете десятичный знак из математической операции с переменной?

Я пытаюсь найти SCALEFACTOR который составляет в основном 10000/(sum of 4th column in a file) . Как получить десятичное число из вывода? Оцените любую помощь заранее.

 #!/bin/bash FILES=/path/to/files/*; for f in ${FILES} do echo $f COLTOTAL="$(awk '{sum += $4} END {print sum}' $f)" echo "total: ${COLTOTAL}" # SCALEFACTOR=`expr 10^5 / $COLTOTAL` B=10000 SCALEFACTOR=$((B / ${COLTOTAL})) SCALINGFACTOR=$(echo "100000 / $COLTOTAL" | bc -l # echo "scale=5; ${SCALEFACTOR}" | bc echo ${SCALEFACTOR} awk '{print($1"\t"$2"\t"$3"\t"$4 * ${SCALINGFACTOR})}' $f > $f"_normalized.txt" done 

One Solution collect form web for “Как вы получаете десятичный знак из математической операции с переменной?”

Способ, которым вы реализовали цикл for будет ломаться, если у вас есть файлы с пробелами в них. Он будет работать отлично, без переменной, for f in /path/to/files/* , так как расширение происходит так, как может понять цикл for .

Как правило, поскольку вам стоит выделять ресурсы для создания новых процессов, лучше всего иметь только один экземпляр awk и, как отметил @ jw013, вы должны выполнить разделение вне оболочки, так как sh и bash неспособны к математике с плавающей запятой ,

Поскольку вам нужно знать конец файла для управления каждой строкой, у вас есть два варианта: прочитать каждый файл, сохранить каждую строку для второго чтения или прочитать каждый файл дважды. Поскольку сохранение больших файлов в памяти может быть проблематичным, я выбрал второй вариант:

 for f in /path/to/files/*; do echo "$f" awk ' NR == FNR { sum += $4; next; } FNR == 1 { print "total: " sum; SCALEFACTOR = 10000 / sum; print SCALEFACTOR; } { printf("%s\t%s\t%s\t%f\n", $1, $2, $3, $4 * SCALEFACTOR); }' "$f" "$f" 

NR == FNR говорит, что общий номер записи (строки) совпадает с номером записи текущего файла, что означает, что вы находитесь в первом файле, а задача под рукой – определить сумму. next предотвращает запуск других статей. В противном случае, если в первой строке второго чтения файла мы делаем материал, который у вас был между вашими awk вызовами. Для каждой строки в этом втором чтении мы печатаем четыре элемента, причем четвертый элемент масштабируется, как вы указали.

Вы можете использовать стандартное форматирование строк для этого четвертого элемента, например, ваша bc шкала bc из пяти изменит мой %f на %.5f

  • Могу ли я получить код выхода из подклассов, запущенных с помощью $ (команды)?
  • Как убедиться, что встроенное эхо-сообщение оболочки вызвано так, что оно не отображается в списке процессов?
  • Рекурсивно удалять файлы с idx> 10000
  • Удалите строку, используя определенные значения (-)
  • Удаление шаблона из файла и добавление его в конец?
  • Убивать детские задания, длительностью более 20 минут
  • Как узнать, содержит ли PWD пробелы или буквы, отличные от английского?
  • Запретить выполнение в домашнем каталоге
  • Как запустить скрипт с другого пути и узнать путь к скрипту?
  • Преобразуйте строки в целые числа и сравните
  • «Тар» - результат поиска, сохраняющий структуру каталогов
  • Interesting Posts

    расширение раздела с помощью resize2fs

    Общий сброс экрана для дисплея borked X?

    Тема zsh не работает на удаленном сервере

    Программа не заканчивается при вызове из udev

    Как настроить zsh-запрос, чтобы его длина была пропорциональна ширине терминала

    Автоматическое обновление GCC до более поздней версии без обновления дистрибутива

    tmux – Catch 22 с «неизвестным ключом: WheelUpPane» для osx и Ubuntu

    Как работает `getline` в AWK?

    Вставка нескольких команд в терминальные остановки при вводе пользователем

    Перенаправляет ли вывод в файл блокировку в файле?

    Использование переменной * в сценарии оболочки для ссылки на все файлы в папке

    sed – найти и заменить текст, содержащий "/"

    Могут ли Linux-программы отправляться команда SIGXXX, на которую они могут отвечать в пользовательском интерфейсе?

    Замена одной тестовой строки на другую в определенном столбце

    Список точек монтирования внешних устройств хранения, таких как USB-брелки и внешние диски SATA, из кли

    Linux и Unix - лучшая ОС в мире.