Я хочу распечатать поле (от 4-го до последнего поля) как новая строка для каждого путем вставки увеличивающийся арифметически переменный (от 5 до 25) после 3-го поля в текстовом файле.
Формат данных:
01.01.1995 01:00 1.0 1.2 2.5 3 4.8 5.2
31.01.1995 23.00 31.0 2.3 7.5 8.7 8.7 10
.
awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(3+i/5)}'
Желаемый вывод:
01.01.1995 01.00 1.0 5 1.2
01.01.1995 01.00 1.0 10 2.5
01.01.1995 01.00 1.0 15 3
01.01.1995 01.00 1.0 20 4.8
01.01.1995 01.00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10
Желаемый производит 2:
01.01.1995 01.00 1.0 5 5.2
01.01.1995 01.00 1.0 10 4.8
01.01.1995 01.00 1.0 15 3
01.01.1995 01.00 1.0 20 2.5
01.01.1995 01.00 1.0 25 1.2
31.01.1995 23.00 31.0 5 10
31.01.1995 23.00 31.0 10 8.7
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 7.5
31.01.1995 23.00 31.0 25 2.3
Таким образом, первые три поля должны быть тем же.
Существует несколько очевидных способов сделать арифметику - например,
$ awk '{for(i=4;i<=NF;i++) print $1,$2,$3,5*(i-3),$i}' file
01.01.1995 01:00 1.0 5 1.2
01.01.1995 01:00 1.0 10 2.5
01.01.1995 01:00 1.0 15 3
01.01.1995 01:00 1.0 20 4.8
01.01.1995 01:00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10
или
$ awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(3+i/5)}' file
01.01.1995 01:00 1.0 5 1.2
01.01.1995 01:00 1.0 10 2.5
01.01.1995 01:00 1.0 15 3
01.01.1995 01:00 1.0 20 4.8
01.01.1995 01:00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10
Для инвертирования порядка заключительного поля запустите в NF
и считайте в обратном порядке, например.
awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(NF+1-i/5)}'