awk сохранить значение столбца 0, когда два столбца имеют значение 0
У меня есть инфиль.txt файл с несколькими столбцами и строками, как это:
входной_файл.формат txt
2020 01 13 00 28.5833 77.2000 979 0 282.6 284.3 285.4 0 0
2020 01 13 00 28.5833 77.2000 925 469.578 290.4 296.9 297.7 3.6 5.1
2020 01 13 00 28.5833 77.2000 909 613.987 290.8 298.8 299.5 4.7 3.3
2020 01 13 00 28.5833 77.2000 850 1169.4 288 301.6 303.1 9.3 0
2020 01 13 00 28.5833 77.2000 700 2776.28 279 308.9 309.6 0 7.1
2020 01 13 00 28.5833 77.2000 500 5561.01 258.1 314.6 314.8 14.2 11.9
и, я хочу выполнить некоторые вычисления на основе столбцов следующим образом:
awk '{R=0; if($12) R=(('$g'/'$theta_vs')*($11-'$theta_vs')*($8-'$z_s'))/(($12^2)+($13^2)); print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,R }' > test.txt
Эта работа совершенна и держать R=0, Когда $12!=0, но это обеспечивает выходное значение 0, Когда $12==0 следующим образом:
выходной_файл:
2020 01 13 00 28.5833 77.2000 979 0 282.6 284.3 285.4 0 0 0
2020 01 13 00 28.5833 77.2000 925 469.578 290.4 296.9 297.7 3.6 5.1 5.08926
2020 01 13 00 28.5833 77.2000 909 613.987 290.8 298.8 299.5 4.7 3.3 9.01363
2020 01 13 00 28.5833 77.2000 850 1169.4 288 301.6 303.1 9.3 0 8.21755
2020 01 13 00 28.5833 77.2000 700 2776.28 279 308.9 309.6 0 7.1 0
2020 01 13 00 28.5833 77.2000 500 5561.01 258.1 314.6 314.8 14.2 11.9 16.3555
Я хочу сохранить R=0, когда оба $12 && $13 равны 0.
Как я могу это сделать?
Спасибо
У вопроса есть решение - Посмотреть?

Источник

У меня есть скрипт из более чем 500 строк, и эти переменные используются часто, и значение этих переменных меняется каждый раз. Поэтому я держал их вне очереди, чтобы избежать путаницы.
Источник

Источник
Ответы - awk сохранить значение столбца 0, когда два столбца имеют значение 0 / awk keep column value 0 when two columns have value 0

23.01.2020 01:35:33
Не могли бы вы, пожалуйста, попробовать следовать.
awk -v G="$g" -v theta="$theta_vs" -v z="$z_s" '{R=0; if($12 || $13) R=((G/theta)*($11-theta)*($8-z))/(($12^2)+($13^2)); print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,R }' Input_file
В случае, если ваши строки имеют только 13 полей, то в соответствии с предложением Эда сэра добавьте следующее.
awk -v G="$g" -v theta="$theta_vs" -v z="$z_s" '{R=0; if($12 || $13) R=((G/theta)*($11-theta)*($8-z))/(($12^2)+($13^2)); print $0,R }' Input_file
Помочь в развитии проекта: