저는 다음과 같은 형식으로 데이터를 수집합니다.
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,sylvain,team:::admin
52,01 dec 2018,sonia,team
52,01 dec 2018,sonia,team
25,01 jan 2019,sonia,team
10,01 jan 2019,sylvain,team:::admin
8,12 jun 2018,öle,team:support
"사용자" 열의 첫 글자를 대문자로 쓰고 모든 이름이 소문자 대신 대문자로 시작하도록 하고 싶습니다. 어떻게 해야 하나요?
그리고 표의 불필요한 내용을 제거한 후 열의 길이를 조절하여 깔끔하게 정리하려면 어떻게 해야 :
하나요 ,
?
답변1
awk
당신을 위해 할 수 있는 일:
awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,Sylvain,team:::admin
52,01 dec 2018,Sonia,team
52,01 dec 2018,Sonia,team
25,01 jan 2019,Sonia,team
10,01 jan 2019,Sylvain,team:::admin
8,12 jun 2018,Öle,team:support
이 함수 substr
는 다음 형식을 가지며 substr(s, a, b)
문자열 s에서 위치 a에서 시작하여 b 문자를 반환합니다. 매개변수 b는 선택사항입니다. 주어진 길이만큼 문자열을 분할할 수 있습니다. 여기서는 세 번째 필드의 첫 번째 문자만 대문자로 시작하고, substr
함수는 초기 문자열, 추출할 첫 번째 문자의 첫 번째 인덱스 및 추출할 문자 수를 사용합니다. 마지막 인수가 누락된 경우 substr
문자열의 나머지 모든 문자가 사용됩니다.
즉, substr($3,1,1)
$3의 첫 번째 문자 substr($3,2)
와 나머지 문자가 평가됩니다.
불필요한 추가 문자를 제거하려면 출력을 sed
다음 으로 파이프하여 column
열의 길이를 조정할 수 있습니다.
awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file | sed -e 's/,/\t/g' -e 's/:/ /g' | awk '{print $1, $2","$3","$4" "$5" " $6" " $7" "$8}' | column -t
CREDITS EXPDATE,USER,GROUPS
99 01,jun,2018 Sylvain team admin
52 01,dec,2018 Sonia team
52 01,dec,2018 Sonia team
25 01,jan,2019 Sonia team
10 01,jan,2019 Sylvain team admin
8 12,jun,2018 Öle team support
답변2
나는 Goro의 제안처럼 많은 파이핑이 필요하지 않다고 생각합니다. awk
스크립트에서 수행되어야 합니다 column
.
awk '
{gsub (/[ ]+/, "/", $2)
$3 = toupper(substr($3,1,1)) substr($3,2)
gsub (/,/, "\t")
gsub (/:+/, " ")
}
1
' FS=, OFS=, file
CREDITS EXPDATE USER GROUPS
99 01/jun/2018 Sylvain team admin
52 01/dec/2018 Sonia team
52 01/dec/2018 Sonia team
25 01/jan/2019 Sonia team
10 01/jan/2019 Sylvain team admin
8 12/jun/2018 öle team support