1-е решение: Не могли бы вы попробовать тоже один раз.Я использую здесь NF
и NF+1
awk
из коробки переменных.Где $NF
обозначает значение последнего столбца текущей строки, а $(NF+1)
создаст дополнительный столбец, если найдено условие st field string
Bob`, ИСТИНА.
awk '{$(NF+1)=$1=="Bob"?400+$NF:""} 1' OFS="\t" Input_file
2-е решение: Если мы не хотим создавать новое поле и просто хотим напечатать значения в соответствии с условием, тогда попробуйте выполнить следующее,Я полагаю, что это должно быть быстрее.
awk 'BEGIN{OFS="\t"}{$1=$1;print $0,$1=="Bob"?400+$NF:""}' Input_file
Вывод будет следующим:
Philip 13 2
Bob 152 8 408
Bob 4561 2 402
Bob 234 36 436
Bob 98 12 412
Rey 147 152
Rey 15 1547
Объяснение: Добавление пояснения к вышекод сейчас.
awk ' ##Starting awk program here.
{
$(NF+1)=$1=="Bob"?400+$NF:"" ##Creating a new last field here whose value will be depending upon condition check.
##its checking condition if 1st field is having Bob string in it then add 400 value to last field value or make it NULL.
}
1 ##awk works on method of condition then action. so by mentioning 1 making condition TRUE here and NO action defined so by default print of current line will happen.
' OFS="\t" Input_file ##Setting OFS as TAB here where OFS ois output field separator and mentioning Input_file name here.