Как перестроить текстовый файл через awk?

Я хочу распечатать поле (от 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

Таким образом, первые три поля должны быть тем же.

0
задан 24 November 2019 в 12:59

1 ответ

Существует несколько очевидных способов сделать арифметику - например,

$ 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)}'
2
ответ дан 21 December 2019 в 23:53

Другие вопросы по тегам:

Похожие вопросы: