По крайней мере, сgawk
(GNU awk )и mawk
вы можете использовать функцию match
для поиска индекса строчной -прописной или прописной -цифры перехода, а затем использовать substr
перерезать -и -перекрыть струну:
awk -F, '
{c = match($1,/[a-z][A-Z]/)}
c>0 {$1 = sprintf("%s %s", substr($1,1,c), substr($1,c+1))}
{c = match($4,/[A-Z][0-9]/)}
c>0 {$4 = sprintf("%s %s", substr($4,1,c), substr($4,c+1))}
1' file.csv
Xiao Li 6705462234 lxiao@unc.edu NC 764
Natkin Pook 8044344528 wnatkin@vcu.edu VA 22345
Elizi Moe 5208534566 emoe@ncsu.edu AZ 85282
Ma Ta 4345667345 mta@yahoo.com TX 91030
Diana Cheng 5203456789 dcheng@asu.edu WY 4587
Jackson Five 5206564573 jfive@ncsu.edu AZ 85483
Adi SrikanthReddy 6578904566 sadi1@asu.edu WS 67854
Если ваш $4
действительно является почтовым индексом США, то, насколько мне известно, формат фиксирован, и вы можете пропустить второй match
и просто сделать
awk -F, '
{c = match($1,/[a-z][A-Z]/)}
c>0 {$1 = sprintf("%s %s", substr($1,1,c), substr($1,c+1))}
{$4 = sprintf("%s %s", substr($4,1,2), substr($4,3))}
1' file.csv
Это немного лучше, если у вас есть механизм регулярных выражений, который допускает утверждения нулевой -длины -, такие как Perl:
perl -F, -ne '
print join " ", map { s/(?<=[[:lower:]])(?=[[:upper:]])|(?<=[[:upper:]])(?=[[:digit:]])/ /; $_ } @F
' file.csv
Xiao Li 6705462234 lxiao@unc.edu NC 764
Natkin Pook 8044344528 wnatkin@vcu.edu VA 22345
Elizi Moe 5208534566 emoe@ncsu.edu AZ 85282
Ma Ta 4345667345 mta@yahoo.com TX 91030
Diana Cheng 5203456789 dcheng@asu.edu WY 4587
Jackson Five 5206564573 jfive@ncsu.edu AZ 85483
Adi SrikanthReddy 6578904566 sadi1@asu.edu WS 67854
polkit не предоставляет привилегии непривилегированным -процессам, он аутентифицирует пользователей и контролирует доступ к действиям, предоставляемым привилегированными процессами. Он не использует возможности для этого.
pkexec
может запускать процесс от имени другого пользователя, но при этом используются механизмы, аналогичныеsudo
:его setuid root.