Как отформатировать отфильтрованные данные в новый файл?

Правильная команда для этого:

mysql -uroot -poldp4ssw0rd -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newp4ssw0rd');"

при условии, что oldp4ssw0rd и newp4ssw0rd — старый и новый пароли.

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

Примечание. :эта команда решает вашу проблему; однако, как правило, не рекомендуется передавать пароли в качестве аргументов командной строки, поскольку они могут быть видны другим вошедшим -пользователям.

0
28.04.2021, 12:38
3 ответа
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
1
28.04.2021, 22:50

Я опоздал на вечеринку, но чтобы немного дополнить и улучшить принятый ответ, я использую ваш второй пример входного 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одного вкладыша, чтобы иметь возможность печатать суммы с десятичными знаками.
0
28.04.2021, 22:50

Предполагая, что количество, которое вы хотите накопить для каждого состояния (двухбуквенная комбинация во втором столбце )является последней в каждой строке ввода:

$ 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].

0
28.04.2021, 22:50

Теги

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