2017-02-21 18 views
0

У меня есть файлы CSV с столбцами n строк и m. Я хочу проверить каждую ячейку (кроме заголовка строки и столбца), если она положительная. Я хочу, чтобы это значение было 2^value. для небольшого использования excel, но количество строк превышает 20k, не может использовать его на моем ПК, любой скрипт shell/python/perl, который может это сделать? Спасибо.Как использовать функцию питания для значений csv-файлов, если они положительны?

например: файл У меня есть

ProbeName US4 US45 
U53 -0.01451 0.236518645 
U62 0.67387 -0.922669981 
U79 0.20579 0.211221866 
U93 -0.72504 -0.158386611 
U19 -0.25354 1.118372946 
U11 0.71177 -0.209527672 

файл результатов

ProbeName US4  US45 
U53 -0.01451  1.17814625389 
U62 1.59535  -0.922669981 
U79 1.15331  1.15766823622 
U93 -0.72504  -0.158386611 
U19 -0.25354  2.17101989391 
U11 1.63782  -0.209527672 
+2

Вы сделали попытку с 'оболочками/Python/perl', любой из него или все? – Inian

ответ

2

Вы можете использовать awk так:

awk 'NR>1{ for(i=2; i<=NF; i++) $i = ($i > 0 ? 2^$i : $i) } 1' file 

ProbeName US4 US45 
U53 -0.01451 1.17815 
U62 1.59535 -0.922669981 
U79 1.15332 1.15767 
U93 -0.72504 -0.158386611 
U19 -0.25354 2.17102 
U11 1.63781 -0.209527672 

Чтобы форматированный вывод:

awk 'NR>1{ for(i=2; i<=NF; i++) $i = ($i > 0 ? 2^$i : $i) } 1' file | column -t 

ProbeName US4  US45 
U53  -0.01451 1.17815 
U62  1.59535 -0.922669981 
U79  1.15332 1.15767 
U93  -0.72504 -0.158386611 
U19  -0.25354 2.17102 
U11  1.63781 -0.209527672 

Узнайте AWK:Effective AWK Programming

+0

Я хочу сделать то же самое с отрицательными значениями, но он дает ошибку –

+0

Я пробовал это для отрицательных значений, но он дает положительное значение 2^awk 'NR> 1 {for (i = 2; i <= NF; i ++) $ i = ($ i <0? 2^- $ i: $ i)} 1 'testt.txt –

+0

Если вы хотите, чтобы власть рассчитывалась только для положительных чисел, почему вы делаете это для отрицательных чисел? – anubhava