2016-08-24 14 views
0

Я бы хотел рассчитать процент в оболочке. Но я не могу этого сделать. Мой сценарийКак рассчитать процент в оболочке

#!/bin/bash 
#n1=$(wc -l < input.txt) #input.txt is a text file with 10000 lines 
n1=10000 
n2=$(awk '{printf "%.2f", $n1*0.05/100}') 
echo 0.05% of $n1 is $n2 

Это не является ни показывать, ни какое-либо значение прекращения при выполнении этого сценария.

+0

Почему вы не можете? Является ли ошибка, останавливающая вас? Что мешает вам? – Li357

+0

Это не конец .. – Kay

+0

Возможный дубликат [Как использовать переменные оболочки в awk-скрипте] (http://stackoverflow.com/questions/19075671/how-to-use-shell-variables-in-awk-script) – tripleee

ответ

3

awk даст вам n1 незаконное полевое имя, если вы сделаете это, так как оно находится внутри одинарных кавычек. Также, чтобы избежать awk Продолжайте читать stdin, вы должны пройти /dev/null как файл. Тогда:

n2=$(awk -v n1="$n1" 'BEGIN {printf "%.2f", n1*0.05/100}' /dev/null) 
1

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

percentage=$(awk 'END{print NR*0.05/100}' input.txt)