awk сохранить значение столбца 0, когда два столбца имеют значение 0

awk сохранить значение столбца 0, когда два столбца имеют значение 0

23.01.2020 01:28:30 Просмотров 26 Источник

У меня есть инфиль.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.

Как я могу это сделать?

Спасибо

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59869165/awk-keep-column-value-0-when-two-columns-have-value-0#comment105869412_59869165
У меня есть скрипт из более чем 500 строк, и эти переменные используются часто, и значение этих переменных меняется каждый раз. Поэтому я держал их вне очереди, чтобы избежать путаницы.

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

RavinderSingh13

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
Barmar

23.01.2020 01:35:41

Изменить

if ($12)

к

if ($12 || $13)

Это присвоит R, если любой из них не равен нулю, и оставит его равным 0, если оба они равны нулю.

Закрыть X