Деление с использованием 2 переменных сокращения - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий код:

#!/bin/bash
pontos=$(cat condutores.txt | cut -d ":" -f 10)
nviagens=$(cat condutores.txt | cut -d ":" -f 9)
divisao=$((pontos / nviagens))
echo $divisao

Я хочу разделить 10-й столбец каждой строки на 9-й столбец condutores.txt.Сохраните его в переменной и убедитесь, что число меньше 5.Однако разделение не работает должным образом.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

вы можете сделать это в одну строку, используя awk!Предположим, у меня есть образцы данных (которые я использую, чтобы имитировать ваши):

1       15      18
2       17      6
3       14      98
4       17      25
5       9       3

Вот как вы делите столбец 3 на столбец 2, используя awk:

awk '{print $3/$2}' example_file.txt

печать на стандартный вывод:

1.2
0.352941
7
1.47059
0.333333

Теперь, скажем, из этого я хотел, чтобы только те значения, которые были меньше 1:

awk '{if ($3/$2 < 1) print $0}' awk_tester.txt

возвращает полные строки:

2       17      6
5       9       3

теперь, еслинам нужно фактическое значение:

awk '{if ($3/$2 < 1) print $3/$2}' awk_tester.txt

возвращает:

0.352941
0.333333

Если ваш разделитель полей равен ':', просто добавьте это в начало каждой команды awk:

-F ':'

вот так:

awk -F ':' '{if ($3/$2 < 1) print $3/$2}' awk_tester.txt
0 голосов
/ 10 октября 2018

Причина, по которой ваше подразделение не работает, заключается в том, что cut дает вам полный столбец.Так что если condutores.txt имеет много строк, вы получите много значений, разделенных \n.Это не то число, которое нужно делить.

Вы можете попробовать что-то еще ...

awk '{print $9/$10}' FS=":" condutores.txt
...