Возможно ли получить bc
для вычисления на основе вывода команды cut
?Выполнение вывода операции вырезания на bc
Допустим, у меня есть следующий столбец файл на основе:
PAK_01896 PAU_03392 75.8 149 32 1 1 145 1 149 * *
PAK_02014 PAU_03392 69.8 149 45 0 1 149 1 149 * *
PAU_02074 PAU_03392 77.2 149 30 1 1 145 1 149 * *
PAU_02206 PAU_03392 69.1 149 46 0 1 149 1 149 * *
PAU_02775 PAU_03392 79.2 149 31 0 1 149 1 149 * *
PAK_02606 PAU_03392 78.5 149 32 0 1 149 1 149 * *
PAU_01961 PAU_03392 67.1 149 49 0 1 149 1 149 * *
PAK_03203 PAU_03392 95.3 149 7 0 1 149 1 149 * *
PLT_01716 PAU_03392 76.5 149 35 0 1 149 1 149 * *
PLT_01758 PAU_03392 79.2 149 31 0 1 149 1 149 * *
PAU_03392 PAU_03392 100.0 149 0 0 1 149 1 149 * *
PLT_01696 PAU_03392 78.5 149 32 0 1 149 1 149 * *
PLT_02424 PAU_03392 78.5 149 32 0 1 149 1 149 * *
PLT_01736 PAU_03392 77.2 149 34 0 1 149 1 149 * *
PLT_02568 PAU_03392 67.1 149 49 0 1 149 1 149 * *
PAK_01787 PAU_03392 66.4 149 50 0 1 149 1 149 * *
Я хотел бы быть в состоянии выполнить некоторые вычисления на определенных областях, например, что-то эффект суммирования и/или усреднения 3-й колонка. В моей голове, я сначала подумал, чтобы попробовать это:
cut -f3 column_based_file.txt | bc
Но, возможно, это не удивительно просто возвращает значение каждого элемента в столбце 3.
Я знаю, что есть осуществимые решения этого в потоках, таких как this one что Я мог бы использовать, но так как разрез был моим способом манипулирования данными на основе столбцов в bash на некоторое время, мне просто интересно, возможно ли это вообще? Может быть, bc
имеет некоторый флаг для чтения в одной строке за один раз и хранить их и т.д.
EDIT Есть некоторые большие решения в резьбе предложили, и в ответах. Из любопытства, так как я так и думал об этом, у кого-нибудь есть решение cut
и bc
(если по какой-то причине perl или awk недоступны?)
См.: [Команда оболочки для суммирования целых чисел, по одной в строке?] (Http://stackoverflow.com/q/450799/3776858) – Cyrus
Ах, отлично, натолкнулся на то, что я смотрел на 'cut 'и' bc'. –
'sum = $ (sed -r" s/+/\ t/g "sumavg.csv | cut -f 3 | paste -s -d + - \ bc)' для суммы. (Мне нужен шаг sed, чтобы вырезать последовательности пространства на одну вкладку) и 'lc = $ (wc -l sumavg.csv | cut -f1 -d" ")' для подсчета строк (следите за тем, чтобы последняя строка данных заканчивалась с новой строкой), а затем выходы: 'echo $ sum' и' echo 'scale = 3; $ sum/$ lc "| bc' для среднего –