Как применить 2 awk внутри условия IF? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть файл в следующем формате:

name   3  4
name  -4  3
name  -5  4
name   2 -4 

Я хочу сделать это подстановку $ 2- $ 3 и добавить дополнительный столбец в начале моего файла со знаком - / + на основе второй столбец, чтобы получить следующий формат:

   - name  -1  3  4
   - name  -7 -4  3
   - name  -9 -5  4
   + name   6  2 -4 

Я использовал эту команду

awk '{print $1,$2-$3,$2,$3}' FILE |if ($2 < 0 ) then awk '{print "-",$0}' ; else awk '{print "+",$0}'; fi 

Что дает:

   - name  -1  3  4
   - name  -7 -4  3
   - name  -9 -5  4
   - name   6  2 -4 

Я пытался "играть" с фигурные скобки, но, кажется, мое состояние останавливается после первого awk. Что я сделал неправильно в моей команде?

1 Ответ

3 голосов
/ 30 апреля 2020

Не могли бы вы попробовать следующее.

awk '{$1=($2>$3?"+":"-") OFS $1 OFS $2-$3} 1' Input_file

Если вы хотите иметь разделенный табуляцией вывод, попробуйте следующее.

awk 'BEGIN{OFS="\t"} {$1=($2>$3?"+":"-") OFS $1 OFS $2-$3} 1' Input_file

Объяснение: Добавление подробного объяснения для вышеуказанного кода.

awk '                                      ##Starting awk program from here.
{
  $1=($2>$3?"+":"-") OFS $1 OFS $2-$3      ##re-creating 1st field, where firstly checking if 2nd field is greater than 3rd than add + or put - then mentioning value of $1 and then subtraction of 2nd and 3rd field.
}
1                                          ##1 will print the lines.
' Input_file                               ##Mentioning Input_file name here.
...