약 27,000개의 열과 40,000개의 행이 있는 파일이 있습니다. 0.0
데이터의 각 열과 행에 있는 s의 개수를 계산해야 합니다 . 각 열의 s 수를 계산하고 인쇄하기 위해 다음 코드를 작성했습니다 0.0
.
awk '{a[$1]++;} END{for(i in a) print a[i]" "i}' file_name.txt
다음 코드를 통합하려고 합니다.
awk -F, '{ for(i=NF; i>=2; --i) printf "%s ", $i; print $1 }' file_name.txt
루프를 만들려면 0.0
모든 의 수를 세고 인쇄하세요. 최종 숫자에 대한 출력 파일을 만들 필요가 없습니다.
답변1
왜 안되나요(devWeek 제안에 대한 사소한 수정,테스트되지 않은):
awk '
{ROWCNT = 0
for (i=1; i<=NF; i++) if ($i == "0.0") {COLCNT[i]++
ROWCNT++
}
print "Row", NR,":", ROWCNT
}
END {for (i=1; i in COLCNT; i++) print "Col", i,":", COLCNT[i]
}
' file
배열 요소를 검색하는 순서가 정의되지 않았기 때문에 입력 행의 순서가 유지됩니다.
답변2
~처럼내 최근 답변하지만 여기서는 필드 값이 일치하는지 확인 0.0
하고 합산하는 대신 열과 행을 별도의 배열로 계산해야 합니다.
awk '{
for (i=1; i<=NF; i++) {
if ($i=="0.0") { zero_in_column[i]+= 1 ; zero_in_row[NR]+= 1 }; }
}
END { for (X in zero_in_row)
print "in_row:"X, zero_in_row[X], "in_column:" X, zero_in_column[X]
}' OFS='\t' infile
노트:zero_in_row
number_of_column > number_of_rows인 경우 배열을 zero_in_column
in 으로 바꿉니다 .END { for (X in zero_in_row)
다음 입력의 경우(END { for (X in zero_in_column)
내 열 수가 행 수보다 많기 때문에):
1 0.0 3 0.0 4 0.0 0.0
3 4 5 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0
출력은 다음과 같습니다
in_row:1 4 in_column:1 1
in_row:2 4 in_column:2 2
in_row:3 7 in_column:3 1
in_row:4 in_column:4 3
in_row:5 in_column:5 2
in_row:6 in_column:6 3
in_row:7 in_column:7 3