일부 값이 포함된 tsv 파일이 있습니다. 각 열의 합계와 총 값 수 및 백분율 값을 원합니다. 예를 들어:
.tsv 파일에는 다음이 포함됩니다.
x 1 1 0 1 x x 1 x
1 1 x 0 0 x 1 x 0
0 0 x 1 1 x 1 1 x
0 x x x 1 x x x 1
(tsv 파일에는 4줄 이상이 포함되어 있습니다)
결과:
x 1 1 0 1 x x 1 x
1 1 x 0 0 x 1 x 0
0 0 x 1 1 x 1 1 x
0 x x x 1 x x x 1
sum 1 2 1 1 3 0 2 2 1
total 3 3 1 3 4 0 2 2 2
percent 33 66 100 33 75 0 100 100 50
sed 스크립트를 사용하여 파일 끝에 추가하지 않고 1과 0의 수를 계산했습니다. 결과의 sum은 열에 있는 '1'의 추가를 나타내고 total은 x
(숫자가 아닌 문자) 값을 무시하고 열에 있는 0과 1의 수입니다.
답변1
awk를 사용하여 숫자 열과 숫자가 아닌 열을 추적하고 마지막에 요약하여 이 작업을 수행할 수 있습니다.
#!/usr/bin/awk -f
BEGIN {
width = 0;
}
{
if (width < NF)
width = NF;
for (n = 1; n <= NF; ++n) {
if ( $n ~ /^[0-9]+$/ ) {
number[n] += $n;
total[n] += 1;
} else {
others[n] += $n;
}
}
print;
next;
}
END {
printf "sum";
for (n = 1; n <= width; ++n) {
printf "%5d", number[n];
}
printf "\n";
printf "total";
for (n = 1; n <= width; ++n) {
printf "%5d", total[n];
}
printf "\n";
printf "percent";
for (n = 1; n <= width; ++n) {
if ( total[n] != 0) {
printf "%5d", 100 * number[n] / total[n];
} else {
printf "%5d", 0;
}
}
printf "\n";
}