Хотя я знаю, что вы просите улучшить свой код.ИМХО лучшим подходом будет использование функции printf
, и вы можете избежать использования слишком большого количества переменных, если они есть, только если у вас нет большой программы, в которой нам может понадобиться использовать эти переменные (которые мы получаем из значений столбцов / полей) позжев программе.
awk '{printf("%d,%d,%d,%d,%s,%s,%d,%d,%d,%d\n",\
$1,$2,$3,$4,\
$3+$(NF-1)>101?"AAA":$3+$(NF-1),\
$3+$NF>104?"BBB":$3+$NF,\
$2+100,$5,$6,$2+5000+$3)
}' Input_file
Вывод будет следующим:
3141,37150,100,10100,101,104,37250,1,4,42250
3141,37201,100,12100,101,104,37301,1,4,42301
3144,37471,100,14100,AAA,BBB,37571,2,5,42571
3141,37471,100,14100,100,BBB,37571,0,6,42571
3141,37471,100,14100,AAA,BBB,37571,5,6,42571
3141,37471,100,14100,101,BBB,37571,1,7,42571
3142,37471,100,14100,AAA,BBB,37571,3,8,42571
3143,37471,100,14100,101,101,37571,1,1,42571
РЕДАКТИРОВАТЬ: Исправлена попытка OPздесь.
ИСПРАВЛЕНО решение кода OP следующим образом:
awk '{
tt1 = $1
tt2 = $2
tt3 = $3
tt4 = $4
tt5 = $5
tt6 = $6
x1 = tt3 + tt5
x2 = tt3 + tt6
x3 = tt3 + tt2
x5= x3 + 5000
if(x1>101){x1="AAA"}
if(x2>104){x2="BBB"}
printf("%d,%d,%d,%d,%s,%s,%d,%d,%d,%d\n", tt1,tt2,tt3,tt4,x1,x2,x3,tt5,tt6,x5)}' Input_file
Вывод будет следующим.
3141,37150,100,10100,101,104,37250,1,4,42250
3141,37201,100,12100,101,104,37301,1,4,42301
3144,37471,100,14100,AAA,BBB,37571,2,5,42571
3141,37471,100,14100,100,BBB,37571,0,6,42571
3141,37471,100,14100,AAA,BBB,37571,5,6,42571
3141,37471,100,14100,101,BBB,37571,1,7,42571
3142,37471,100,14100,AAA,BBB,37571,3,8,42571
3143,37471,100,14100,101,101,37571,1,1,42571
Проблемы ИСПРАВЛЕНЫ в коде OP:
1 - Удалено %5d
и изменено значение на %d
, чтобы удалить ненужные пробелы из десятизначной печати.
2 - исправлены разделители в printf
, между которыми они поменялись на ,
.
3- Удалена переменная x6
, кажется, что НИКОГДА не использовалась, и изменила ее на x5
.
4 - изменен if
синтаксис условия.Кажется, синтаксис НЕ был правильным, поскольку он был изменен с if{.....)
на if(....)
.
5 - Удалено лишнее awk
, которое НЕ использовалось после вышеуказанных изменений в коде.