Правильная команда для этого:
mysql -uroot -poldp4ssw0rd -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newp4ssw0rd');"
при условии, что oldp4ssw0rd и newp4ssw0rd — старый и новый пароли.
Вам не нужно останавливать или перезапускать сервер MySQL в любое время. Фактически, служба должна быть запущена, чтобы вы могли подключиться к ней и выполнить указанную выше команду.
Примечание. :эта команда решает вашу проблему; однако, как правило, не рекомендуется передавать пароли в качестве аргументов командной строки, поскольку они могут быть видны другим вошедшим -пользователям.
awk 'BEGIN{ FS=OFS="," }
{ arr_state[toupper($2)]+=$11 }
END {
print "Transaction Count Report"
for (id in arr_state) {
printf "%-10s %d\n", id, arr_state[id]
}
}' infile
Я опоздал на вечеринку, но чтобы немного дополнить и улучшить принятый ответ, я использую ваш второй пример входного CSV-файла для распределения результатов по мужчинам и женщинам в каждом штате. (Личные данные в файле были отредактировано мной):
$ cat infile
c77ea913-c4a2-4ff6-b615-26028b375fda,wye,nnnnnnnnn,nnnnnnnnn@ddddd.ss,0,243.54,dddddddddddddddd,8a412563-2956-4bf3-9df3-54277a9799c7,yyyy-mm-dd,ss ssss sssssss, ccccccccc,ca,90000,ddd-ddd-2825
c117f14d-1322-45a9-9f9b-63db5105fd6c,melany,nnnnnnnnn,nnnnnnnnn@ddddd.ss,0,23.26,4.dddddddddddddddd,a59201e8-9d3c-4f2b-b1fb-6914895fa5cd,yyyy-mm-dd,aa aaaaaaaaaaa aaa, ccccccccc,wv,25000,ddd-ddd-2869
3153178c-a3fb-44d3-896f-f39da69fe826,obed,nnnnnnnnnn,nnnnnnnnn@ddddddd.cc,1,477.18,dddddddddddddddd,4724a9c3-fc8a-49d3-956a-b0646364d3ef,yyyy-mm-dd,aaa aaaaa aaaaa,cccccccccccc,al,35000,ddd-ddd-8746
e4eb28e6-f960-49eb-8f5d-361df60f00c7,jerome,nnnnnnnnn,nnnnnnnnn@ddddd.cc,1,236.99,dddddddddddddddd,af393a75-6298-4c82-84e0-a778ec9956a2,yyyy-mm-dd,aa aaa aaaaa aaaaaaa,cccccccccccccccc,wv,25000,ddd-ddd-3204
b5c32ded-e769-4c52-a553-e34b548280d0,damiano,nnnnnnnnn,nnnnnnnnn@ddddd.cc,1,921.60,dddddddddddddddd,ff06abad-6787-4236-856d-74ec49df3d04,yyyy-mm-dd,aaaa aa aaaaaaaa,cccccccccccc,ok,73000,ddd-ddd-5361
где значение 5-го поля либо "0" для женщин, либо "1" для мужчин, в соответствии с моей (несомненно -сомнительной )гендерной атрибуцией, основанной на предоставленных именах.
$ awk 'BEGIN {FS=","}
{assoc_arr[toupper($12)$5]+=$6}
END {for (id in assoc_arr) {
printf "%-10s %-4s %8.2f\n", substr(id,1,2), substr(id,3), assoc_arr[id]
}
}' infile
CA 0 243.54
AL 1 477.18
WV 0 23.26
WV 1 236.99
OK 1 921.60
assoc_arr
может содержать любые значения составного индекса. Здесь toupper($12)$5
,но вы можете связать любое доступное поле awk
.%f
)вместо «цифры» (как%d
)в действии printf
внутри awk
одного вкладыша, чтобы иметь возможность печатать суммы с десятичными знаками. Предполагая, что количество, которое вы хотите накопить для каждого состояния (двухбуквенная комбинация во втором столбце )является последней в каждой строке ввода:
$ awk -F, -v OFS='\t' '{ sum[$2] += $NF } END { print "State", "Transaction count"; for (i in sum) print toupper(i), sum[i] }' file.csv
State Transaction count
OR 366.68
WV 531.13
AK 792.74
AL 477.18
TX 166.62
CA 781.65
FL 88.88
NV 858.58
MN 93.65
GA 171.06
LA 570.32
OK 921.6
Это устанавливает разделитель выходного поля OFS
на символ табуляции в командной строке, а также разделитель входного поля FS
на символ запятой. Это предполагает, что ввод представляет собой простой CSV-файл , т. е. файл, содержащий строки с полями, разделенными запятыми -, где ни одно поле не содержит встроенных запятых или символов новой строки.
Ассоциативный массив sum
использует второе поле в качестве своего ключа, и для каждой строки сумма увеличивается с использованием последнего поля в строке.
В конце печатается простой заголовок и выводятся собранные данные в массиве sum
.
В качестве отдельной -отдельной awk
программы,код будет записан как
BEGIN {
FS = ","
OFS = "\t"
}
{
sum[$2] += $NF
}
END {
print "State", "Transaction count"
for (i in sum)
print toupper(i), sum[i]
}
Это будет использоваться как
$ awk -f script.awk file.csv
Если вы хотите, чтобы сумма была округлена до ближайшего целого числа, выведите int(sum[i]+0.5)
вместо просто sum[i]
.