выполнение арифметики для переменных, установленных циклом while-read - PullRequest
0 голосов
/ 02 июля 2019

Я хочу выполнить некоторые арифметические операции и арифметические операции с плавающей запятой над некоторыми переменными, которые я прочитал из цикла while.Мой код выглядит так:

while read n p qlen slen len; do 

    random_var=$(( $qlen + 0 )) # gives all zeros, not saving qlen

    qcov=$(echo $len / $qlen | bc -l) #len and qlen are nothing, not working

    qcov=$( bc  <<< "scale=3; $len / $qlen" ) #same reason as above, not working

done < input_file.txt       

Я вытягиваю каждую строку в input_file.txt и анализирую данные в соответствующие им имена переменных, n, p, qlen, slenlen.Входной файл input_file.txt выглядит следующим образом:

test1 12.345 123 234 12
test2 23.456 345 678 43
test3 98.765 6537 874 346
...

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь выполнить некоторую арифметическую операцию над любой из переменных из read.Я могу echo переменные просто отлично, но как только я пытаюсь выполнить любую арифметическую манипуляцию, значения ничего не значат.Я подозреваю, что они не цифры, для начала какой-то тип строки (?).Я пробовал много целочисленных и арифметических выражений с плавающей точкой и не могу сохранить значения в переменных.bc команды, арифметическое расширение, echo, переданное в bc, тройное <<< для bc, все эти решения, которые я нашел в сети, не работают.

Наиболее распространенные ошибкиЯ получаю:

  • строки ничего
  • (вход в систему) ошибка 1: ошибка синтаксического анализа
  • (вход в систему) ошибка 2: ошибка синтаксического анализа

Я думал об использовании awk, но мне нужно выполнять эти операции в каждой строке, и awk продолжает работать до конца файла.Есть ли еще способ сделать то, что я хочу, используя awk?Я действительно не знаю.

Если у кого-то есть ответ или альтернативный способ извлечь данные из файла, я был бы очень признателен.

Заранее спасибо.

ОБНОВЛЕНИЕ:

некоторые возни с кодом заставили меня понять, что все в input_file.txt сохраняется только в первой переменной n.Вот почему другие переменные пусты и почему эхо всех переменных выглядело правильно.

Есть идеи, почему значения не сохраняются в правильные переменные?

1 Ответ

1 голос
/ 02 июля 2019

Я не знаю, что вы действительно хотите получить.но похоже что-то вроде

awk '{print $5/$3}' input_file.txt 
0.097561
0.124638
0.0529295
...