Как умножить разные числа в определенном столбце в определенных строках?

В моем случае у меня была ошибка

vmware modconfig can not continue xzcheck debian

При проверке /var/logs/message я обнаружил, что проблема связана с неустановленным пакетом libcanberra. Решил эту проблему с помощью:sudo apt-get install libcanberra*

0
11.02.2020, 01:46
4 ответа

Вам нужно работать с NR= Переменная номера строки в awk

awk 'NR<=5{$2=$2*5};NR>5 && NR<=8{$2=$2*4};NR>8 && NR<=10{$2=$2*3};1' file1
1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2
1
28.04.2021, 23:23

Вы можете использовать операторы if...elseи NR, чтобы получить номер строки.

awk '{if (NR==1) {print $1, $2*5, $3, $4, $5} else if (NR <= 6) {print $1, $2*5, $3, $4, $5} else if (NR<=9) {print $1, $2*4, $3, $4, $5} else {print $1, $2*3, $3, $4, $5}}' defect > out.txt

и т. д.

1
28.04.2021, 23:23

Если первое поле является элементом управления для множителя (, поскольку на номер строки влияет любая строка заголовка ), вы можете сопоставить с $1:

awk '$1 ~ /1$|2|3|4|5/ {$2*=5}; $1 ~ /6|7|8/ {$2*=4}; $1 ~ /9|10/ {$2*=3};1' defect 
# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2
0
28.04.2021, 23:23

Выполнено с помощью awk -if -else if -else condition

awk '{if (NR<6){print $1,5*$2,$3,$4}else if(NR>5 && NR<9){print $1,4*$2,$3,$4}else {print $1,3*$2,$3,$4}}' p

выход

1 500 1 1
2 1000 1 1
3 1500 1 1
4 2000 1 1
5 2500 1 1
6 2400 1 1
7 2800 2 2
8 3200 2 2
9 2700 2 2
10 3000 2 2
0
28.04.2021, 23:23

Теги

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