Я ищу вашу помощь в хранении awk, возвращающем значения в массиве для моего awk для цикла, используя условия else.awk for loop with if else условия для массива
If $3 == $7
then print $9 multiplied by $4
else print $4 multiplied by (2 minus $9)
Я получил эту работу до сих пор:
awk '{if ($3 == $7) print $9*$4; else print $4*(2-$9);}' file >outfile
выше код работает для первого столбца данных ($9
). Тем не менее, я хочу перебрать все столбцы с 9 по 1547 и вернуть массив, содержащий возвращаемые значения. Это должно быть достаточно простым, но я не могу понять некоторые основные понятия здесь.
До сих пор я понимаю необходимость объявлять количество циклов, до фактической функции по:
AWK '{для (I = 9; я < = NF; я ++)} END {если ($ 3 == $ 7) print $ i * $ 4; else print $ 4 * (2- $ i);} '
Однако, как и когда объявлять массив вне меня (биолог). Любая помощь будет высоко оценен.
Пример:
вход (большой файл .. здесь колонки 1-10):
rs2070501 22. 0,0206 0,337855 rs2070501 Г.А. 0,977 0,066
выход:
0.0210738
здесь еще заявление пинки в ($ 3 * (2- $ 9)
Как получить AWK, чтобы распечатать массив 9-NTH, а не просто колонка 9
Что вы подразумеваете под "return a array"? Можете ли вы показать ввод и вывод образцов? – tripleee
Блок 'END' - это то, что происходит, когда все строки были прочитаны. Вы имеете в виду что-то вроде 'awk '{for (i = 9; i <= NF; ++ i) printf"% s% i ", (i == 9?" ":" "), ($ 3 == $ 7 ? $ i * $ 4: $ 4 * (2- $ i)); printf "\ n"} '' возможно? – tripleee
@ triplee ваш код кажется многообещающим, но возвращает только «0» в каждой ячейке. Но имеет правильное количество столбцов. – MortenM