열과 행을 반복하여 특정 값을 계산합니다.

열과 행을 반복하여 특정 값을 계산합니다.

약 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_rownumber_of_column > number_of_rows인 경우 배열을 zero_in_columnin 으로 바꿉니다 .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

관련 정보