각 열의 값을 합산하고 열 머리글을 바꾸는 데 필요한 상당히 큰 CSV 파일이 여러 개 있습니다.
샘플 csv :
col1,col2,col3
enabled,disabled,active
disabled,disabled,enabled
N/A,enabled,active
enabled,N/A,disabled
원하는 출력 :
col1,2 enabled,1 disabled,1 N/A
col2,1 enabled,2 disabled,1 N/A
col3,1 enabled,1 disabled,2 active
실제 csv에는 더 많은 열과 행이 있으므로 파일을 자동으로 반복 할 수있는 것이 좋습니다. 한 번에 하나의 열을 수행하는 awk 프로그램의 해킹 작업을 생각해 낼 수는 있지만 한 번에 전체 파일을 처리 할 수 있고 어디서부터 시작해야할지 모르겠습니다. 출력은 내가 포함시킨 정확한 형식 일 필요는 없지만 적어도 유사합니다.
$ cat tst.awk
BEGIN { FS=OFS="," }
NR==1 { numRows = split($0,keys); next }
{
for (i=1; i<=NF; i++) {
sum[i,$i]++
vals[$i]
}
}
END {
for (rowNr=1; rowNr<=numRows; rowNr++) {
printf "%s", keys[rowNr]
for (val in vals) {
printf "%s%d %s", OFS, sum[rowNr,val], val
}
print ""
}
}
$ awk -f tst.awk file
col1,1 disabled,2 enabled,1 N/A,0 active
col2,2 disabled,1 enabled,1 N/A,0 active
col3,1 disabled,1 enabled,0 N/A,2 active
또는 아마도 더 유용하게 :
$ cat tst.awk
BEGIN { FS=OFS="," }
NR==1 { numRows = split($0,keys); next }
{
for (i=1; i<=NF; i++) {
sum[i,$i]++
vals[$i]
}
}
END {
printf "%s", "key"
for (val in vals) {
printf "%s%s", OFS, val
}
print ""
for (rowNr=1; rowNr<=numRows; rowNr++) {
printf "%s", keys[rowNr]
for (val in vals) {
printf "%s%d", OFS, sum[rowNr,val]
}
print ""
}
}
$ awk -f tst.awk file
key,disabled,enabled,N/A,active
col1,1,2,1,0
col2,2,1,1,0
col3,1,1,0,2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다