Как рассчитать, взяв первое поле

Я пытаюсь сделать такой расчет, у меня есть текстовый файл с такими цифрами, как

459 455 463 

И я должен рассчитать процент этих чисел относительно 600. Я имею в виду точно

(459/600)*100 который будет моим процентом, 459 получается из текстового файла.

Может ли кто-нибудь помочь мне, пожалуйста?

6 Solutions collect form web for “Как рассчитать, взяв первое поле”

ОК, теперь квинеон изменился почти полностью ^^ Теперь вам нужно рассчитать, заданные числа, сколько% они представляют относительно числа 600.

Вот пересмотренная версия.

Я дал свой старый ответ ниже по исторической причине ^^

новый ответ:

 awk ' { printf "%s %.2f%\n",$1,($1/600)*100; }' numbers.txt 

т.е. если файл «numbers.txt» содержит только 1 столбец с числом от 0 до 600, он просто печатает номер, а в следующем столбце -%, который он представляет в отношении 600. Я мог бы просто получить второй расчет как ( $ 1/6) «%», но это, на мой взгляд, вывело бы важную информацию из сценария.

на вашем новом примере данные, которые он теперь выводит:

 459 76.50% 455 75.83% 463 77.17% 

старый ответ:

Если вам действительно нужно рассчитать процент , то это будет примерно так:

 awk ' { # each line is read and stored, and the sum is computed also. original[NR]=$0 ; #store the current line (line NR) in the "original[]" tab sum+=$1 ; #and compute the sum of the 1st column } END { #at the END, ie after we processed the whole file for(line=1;line<=NR;line++) { printf "%s %.2f%\n",original[line],original[line]/sum*100 ; } } ' numbers.txt 

что-то вроде этого должно вычислять% и помещать его рядом с номером (с двумя дробными цифрами)

на вашем примере он выводит:

 12 5.36% 23 10.27% 35 15.62% 67 29.91% 87 38.84% 

Если ваш файл на самом деле представляет собой список чисел, по одному в строке, выполните следующие действия:

 awk '{print $1,$1"%"}' numbers.txt 

или, в sed :

 sed -r 's/(.+)/\1 \1%/' numbers.txt 
 $ paste -d' %' numbers.txt numbers.txt /dev/null 12 12% 23 23% 35 35% 67 67% 87 87% 

-d принимает несколько разделителей: пробел и проценты здесь

То же, что и @ slm's, просто используя класс символов:

 $ sed -r 's/([[:digit:]]+)/\1 \1%/g' numbers.txt 

Это можно сделать с помощью sed .

Если номера упорядочены:

 12 23 35 67 87 

пример

 $ sed 's/\([0-9]\+\)/\1 \1%/g' somefile.txt 12 12% 23 23% 35 35% 67 67% 87 87% 

Детали

  1. Мы используем способность sed искать и заменять ( s/../../g ).
  2. \([0-9]\+\) соответствует любой последовательности чисел (12, 23, ..). Параны вокруг этого сохраняют эти результаты во временной переменной ( \1 ).
  3. Каждый раз, когда мы находим совпадающую последовательность чисел, мы заменим ее на себя и другую копию самого себя и знак процента ( \1 \1% )

ПРИМЕЧАНИЕ. Если версия sed поддерживает -r вы можете слегка конденсировать выше:

 $ sed -r 's/([0-9]+)/\1 \1%/g' somefile.txt 12 12% 23 23% 35 35% 67 67% 87 87% 

Если они устроены:

 12 23 35 67 87 

пример

 $ sed -r 's/([0-9]+)/\1 \1%/g' somefile.txt 12 12% 23 23% 35 35% 67 67% 87 87% 

Почему бы не использовать простую cat за которой следует echo , построив и выполнив командную строку из stdin?

 cat somefile.txt|xargs -I {} echo "{} {}%" > somefile.out 
  • Перенаправить stdout и stderr, с метками времени только на stderr
  • Что такое Bash Statement
  • Как назвать файл на самом глубоком уровне дерева каталогов
  • Неожиданное поведение расширения поля с помощью bash for loop
  • Может ли кто-нибудь сказать мне, что случилось с этим скриптом unix?
  • Как перейти в каждый каталог и выполнить команду по определенному файлу?
  • Чтение ячеек в файле csv
  • Объясните этот скрипт bash: echo "$ {1 ## *.}"
  • Сценарий Bash для перебора файлов
  • Почему (``) дает список, а $ () дает только один аргумент
  • Как определить аналогичную функцию bash сразу
  • Interesting Posts

    getopts Справка Unix

    Ящик NAS, смонтированный через CIFS – проблема с разрешениями

    как проверить версию ядра, которая использовалась при создании пакета

    Как я могу заставить команду «bind» работать в sh shell

    команда linux / unix для проверки внешних / внутренних сетевых соединений

    Не удалось установить новый созданный раздел на виртуальной машине, работающей с CentOS

    Может ли KWallet управлять моими ssh-паролями?

    Почему я не могу найти параметр -f для команды shutdown в man?

    Как отключить бесполезные записи журнала аудита в dmesg

    Как установить пароль нового пользователя после того, как учетная запись уже создана?

    Разблокировать раздел LUKS с помощью ключевого файла без доступа root?

    Возможно ли отправить данные в оболочку другого псевдотерминала?

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

    Экран мерцает (только на рабочем столе) с Fedora 20, но почему?

    Возможно ли обновить OpenBSD по сети?

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