Как выполнить расчет для каждой строки

В принципе, поскольку данные могут быть считаны только после разблокировки диска, независимо от того, авторизован ли пользователь автоматически или нет, автоматический вход в систему -почти не повлияет на безопасность , так как пользователь уже прошел аутентификацию при загрузке.

Предполагается, что компьютер правильно выключен, пароль шифрования не разглашается, пароль достаточно длинный и т. д. Применяются передовые методы шифрования диска.

4
02.05.2021, 13:38
3 ответа

поступай так:

$ awk 'BEGIN{ FS=OFS="," } { $5=NR>1?$2+$3-$4:"net" }1' infile
name,income,reward,payment,net
Jackson,10000,2000,1000,11000
Paul,2500,700,200,3000
Louis,5000,100,1800,3300

или обновленный ожидаемый результат:

$ awk -F, 'NR>1{ print NR-1, $1, "net= " $2+$3-$4 }' ifnile
1 Jackson net= 11000
2 Paul net= 3000
3 Louis net= 3300
4
28.07.2021, 11:35
$ awk -F, -v OFS=, 'NR>1 { print $1, $2+$3-$4 }' data.csv 
Jackson,11000
Paul,3000
Louis,3300

Или, если вы хотите, чтобы сеть была добавлена ​​к существующим данным вместе с (обновленной строкой заголовка ):

$ awk -F, -v OFS=, 'NR==1 {print $0,"net"}; NR>1 {print $0, $2+$3-$4}' data.csv 
name,income,reward,payment,net
Jackson,10000,2000,1000,11000
Paul,2500,700,200,3000
Louis,5000,100,1800,3300
5
28.07.2021, 11:35

Использованиеawk:

awk -F',' '{ p[NR] = $1;net[NR] = $2+$3-$4} END {for (i=2;i<=NR;i++) print (i-1), p[i], "net = ", net[i]}' data.csv

Поскольку это файл csv, FS = ','или-F ','

Созданы следующие массивы pи net. Они проиндексированы по номерам записей NR ().

Затем цикл for (i-1), p[i], "net = ", net[i]работает, как вы и планировали. forЦикл запускается с 2, так как первая строка является строкой заголовка.

pipeв данном случае бесполезно. Другое дело, что ваш цикл хорош, но ограничение должно быть NR, а не NF.

1
28.07.2021, 11:35

Теги

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