값의 각 행 아래에 있는 열 수 계산

값의 각 행 아래에 있는 열 수 계산

값이 5보다 작은 열의 수를 행 단위로 계산해야 합니다. 내 데이터는 다음과 같습니다.

1.2 8.9  4.5  2.8 
4.9 10.1 15.3 1.1 
2.1 4.3  3.9  3.3 
.
.

따라서 원하는 출력은 다음과 같습니다.

3
2
4

답변1

레코드당 필드 수(기본적으로 행당 공백으로 구분된 열)는 입니다 NF. 루프를 사용하여 레코드의 모든 필드를 반복할 수 있습니다 for (i = 1; i <= NF; ++i). 필드의 데이터는 루프 내에서 사용할 수 있습니다 i. $i예를 들어:

awk '{ count = 0; for (i = 1; i <= NF; ++i) if ($i < 5) ++count; print count }'

아니면 좀 더 자세히 적어서,

awk '
    {
        count = 0

        for (i = 1; i <= NF; ++i)
            if ($i < 5)
                ++count

        print count
    }'

ifand 문의 본문 for은 단지 명령문이므로 추가 개행 문자가 필요하지 않습니다 { ... }(C 프로그래밍 언어와 비슷하지만 Perl과는 다릅니다). 동일한 줄에서 한 문을 다른 문과 분리하려는 경우가 아니면 줄 끝은 필요하지 않습니다(예: ;위의 두 동등한 코드 조각의 사용법 비교).;

답변2

또 다른 방법은 Perl을 사용하는 것입니다.

perl -alpe '$_ = grep { $_ < 5 } @F' file

grep 결과의 스칼라 할당은 이를 일치하는 요소 수로 변환합니다.

답변3

입력을 실행 tr하고 다음을 통해 음수를 식별하는 데 사용되는 모든 대시를 밑줄로 변환합니다 dc.

$ tr \- _ < inp.txt |
  dc -e '
  [q]sq
  [lN1+sN]sa
  [5>az0<b]sb
  [?z0=q0sNlbxlNpcz0=c]sc
  lcx
 '

관련 정보