필드 1의 각 레코드 값을 비교하여 최소 및 최대 값 AWK 찾기

멀리 다르 피차 디아

텍스트 전처리 및 AWK 언어를 처음 사용합니다.

주어진 필드 (field1)의 각 레코드를 반복하고 값의 최대 값과 최소값을 찾아 변수에 저장하려고합니다.

알고리즘 :

1) 최소 = 0 및 최대 = 0 설정

2) $ 1 (필드 1)을 통한 루프

3) 필드 1의 FNR을 비교하고 최대 및 최소 설정

4) 마지막으로 최대 및 최소 인쇄

이것이 내가 시도한 것입니다.

BEGIN{max = 0; min = 0; NF = 58}
{
     for(i = 0; i < NF-57; i++)
     {

           for(j =0; j < NR; j++)
           {
             min = (min < $j) ? min : $j
             max = (max > $j) ? max : $j
           }
     }
}
END{print max, min}

#Dataset
f1  f2  f3  f4 .... f58
0.3 3.3 0.5 3.6
0.9 4.7 2.5 1.6 
0.2 2.7 6.3 9.3
0.5 3.6 0.9 2.7
0.7 1.6 8.9 4.7

여기서 f1, f2, .., f58은 데이터 세트의 필드 또는 열입니다.

열 1 (f1)을 반복하고 Min-Max를 찾아야합니다.

필요한 출력 : 최소 = 0.2 최대 = 0.9

결과로 얻는 것 : Min = ''(나는 어떤 결과도 얻지 못함) Max = 9.3 (field1 대신 모든 필드의 최대 값을 얻음)

이것은 학습 목적으로 하나의 칼럼을 요청했습니다. 여러 칼럼에 대해 스스로 시도 할 수 있도록

이것이 내가 가진 것입니다.

이 for 루프는 4 개의 필드 만 있기 때문에 4 번만 반복됩니다. for 루프 내부의 코드가 각 레코드에 대해 5 번 실행됩니까?

for(i = 0; i < NF; i++)
{
    if (min[i]=="") min[i]=$i
    if (max[i]=="") max[i]=$i
    if ($i<min[i]) min[i]=$i
    if ($i>max[i]) max[i]=$i
}

END
{
    OFS="\t"; 
    print "min","max";
    #If I am not wrong, I saved the data in an array and I guess this would be the right way to print all min and max?
    for(i=0; i < NF; i++;)
    {
            print min[i], max[i]
    }
}
Camusensei

여기에 당신이하고있는 것보다 훨씬 쉬운 작업 솔루션이 있습니다.

/^-?[0-9]*(\.[0-9]*)?$/$1실제로 유효한 숫자인지 확인합니다 . 그렇지 않으면 버려집니다.

sort -n | awk '$1 ~ /^-?[0-9]*(\.[0-9]*)?$/ {a[c++]=$1} END {OFS="\t"; print "min","max";print a[0],a[c-1]}'

이것을 사용하지 않으면 min과 max를 초기화해야합니다. 예를 들어 첫 번째 값으로 :

awk '$1 ~ /^-?[0-9]*(\.[0-9]*)?$/ {if (min=="") min=$1; if (max=="") max=$1; if ($1<min) min=$1; if ($1>max) max=$1} END {OFS="\t"; print "min","max";print min, max}'

읽을 수있는 버전 :

sort -n | awk '
$1 ~ /^-?[0-9]*(\.[0-9]*)?$/ {
  a[c++]=$1
}
END {
  OFS="\t"
  print "min","max"
  print a[0],a[c-1]
}'

awk '
  $1 ~ /^-?[0-9]*(\.[0-9]*)?$/ {
    if (min=="") min=$1
    if (max=="") max=$1
    if ($1<min) min=$1
    if ($1>max) max=$1
  }
  END {
    OFS="\t"
    print "min","max"
    print min, max
  }'

귀하의 입력에는 다음과 같은 출력이 있습니다.

min     max
0.2     0.9

편집 ( awk작동 방식 에 대한 추가 정보가 필요한 주석에 응답 ) :

Awk는 lines(이름 records)을 반복 하고 각 줄에 사용할 수있는 열 (이름 fields)이 있습니다. awk반복은 한 줄을 읽고 다른 것들 사이에 NRNF변수를 제공 합니다. 귀하의 경우에는 첫 번째 열에 만 관심 $1이 있으므로 첫 번째 열만 사용 field합니다. 양수 및 음수 정수 또는 부동 소수점과 일치하는 정규식 인 recordwhere $1is matching에 /^-?[0-9]*(\.[0-9]*)?$/대해 값을 배열 a(첫 번째 버전)에 저장하거나 필요한 경우 min/ max변수를 설정합니다 (두 번째 버전에서).

다음은 조건에 대한 설명입니다 $1 ~ /^-?[0-9]*(\.[0-9]*)?$/.

  • $1 ~첫 번째 필드 $1가 슬래시 사이의 정규식과 일치 하는지 확인하고 있음을 의미합니다.
  • ^$1필드 의 처음부터 일치를 시작 함을 의미 합니다.
  • -? 선택을 의미 minus sign
  • [0-9]*임의의 자릿수 (0 포함, 일치 .1하거나 -.1일치 할 수 있음)
  • ()? 존재할 수 있거나 없을 수있는 선택적 블록을 의미합니다.
  • \.[0-9]*해당 옵션 블록이있는 경우 a로 시작 dot하고 0 개 이상의 숫자를 포함 해야합니다 (따라서 일치 -.하거나 .일치 할 수 있습니다! 불확실한 입력이있는 경우 정규식을 조정하십시오).
  • $$1필드 의 마지막 문자까지 일치 함을 의미 합니다.

을 반복 fields하려면 다음과 같이 for 루프 from 1to NF(포함) 을 사용해야합니다 .

echo "1 2 3 4" | awk '{for (i=1; i<=NF; i++) {if (min=="") min=$(i); if (max=="") max=$(i); if ($(i)<min) min=$(i); if ($(i)>max) max=$(i)}} END {OFS="\t"; print "min","max";print min, max}'

(단순함을 위해 여기에서 입력 한 내용을 확인하지 않았습니다.)

출력되는 내용 :

min     max
1       4

입력으로 더 많은 행이있는 경우 다음 입력으로 awk첫 번째 record예를 읽은 후 처리합니다 .

1 2 3 4
5 6 7 8

출력 :

min     max
1       8

이를 방지하고 첫 번째 줄에서만 작동하려면 첫 번째 줄만 NR == 1처리 하는 조건 을 추가하거나 루프 exit뒤에 문을 추가 for하여 첫 번째 줄 이후의 입력 처리를 중지 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

열 1의 최대 값을 찾고 파일에서 열 2의 각 레코드를 인쇄하십시오.

분류에서Dev

어레이의 각 열에서 최소 및 최대 값을 구하는

분류에서Dev

C prgram에서 일련의 숫자에서 최대 및 최소 값 찾기 (내 코드 오류)

분류에서Dev

자바에서 배열의 최소 및 최대 값을 찾기

분류에서Dev

이전 9 개 행의 최소값 및 최대 값 찾기

분류에서Dev

MPI 링 토폴로지를 사용하여 각 프로세서의 로컬 최대 값을 비교하여 함수의 전역 최대 값 찾기

분류에서Dev

두 열의 최대 값을 사용하여 레코드 선택

분류에서Dev

Group By 및 Join 문을 사용하여 최대 및 최소값 찾기

분류에서Dev

연관 배열 PHP의 최소 및 최대 키와 값 찾기

분류에서Dev

테이블의 각 레코드에 대해 최소 및 최대를 사용하여 열을 업데이트합니다.

분류에서Dev

재귀 및 루프 없음을 사용하여 중첩 목록 파이썬의 최소 최대 값 찾기

분류에서Dev

Oracle 테이블 레코드를 배치로 분할하고 열의 최소값을 최대로 얻습니다.

분류에서Dev

R의 인구 비율 및 최소 / 최대 기준을 사용하여 영역에 값을 분배합니다.

분류에서Dev

각 그룹의 각 값을 그룹의 최소값과 비교

분류에서Dev

R의 최소값 및 열 값을 기반으로 새 필드를 만드는 방법

분류에서Dev

인덱스를 사용하여 각 열의 최소값 찾기

분류에서Dev

최대 및 최소 값을 기반으로하는 Ag 그리드 셀 선형 그래디언트 색상

분류에서Dev

코드에서 WKInterfaceSlider에 최소 및 최대 값 할당

분류에서Dev

레코드 목록의 최대 값

분류에서Dev

awk를 사용하여 문자가있는 줄을 무시하여 필드의 최대 값을 찾는 방법은 무엇입니까?

분류에서Dev

열의 최소 및 최대 행 찾기 및 다른 열의 값 빼기

분류에서Dev

열에서 일치하는 값 및 일치하는 값의 최소 / 최대 값 타임 스탬프를 기반으로 데이터 프레임 필터링

분류에서Dev

특정 필드 값을 포함하는 두 개의 최신 및 가장 오래된 문서 찾기

분류에서Dev

icCube-최소 및 최대 값을 기반으로하는 InterpolateRGBColors?

분류에서Dev

icCube-최소 및 최대 값을 기반으로하는 InterpolateRGBColors?

분류에서Dev

Azure Logic App을 사용하여 생성 된 필드의 최대 값을 기반으로 SharePoint 목록에서 레코드 선택

분류에서Dev

R의 여러 데이터 프레임에서 각 셀의 최대 값 찾기

분류에서Dev

MySQL-여러 열에서 10 개 레코드의 "최대"절대 값을 찾으십니까?

분류에서Dev

R은 다른 행을 기반으로 각 그룹의 최소값과 최대 값을 찾습니다.

Related 관련 기사

  1. 1

    열 1의 최대 값을 찾고 파일에서 열 2의 각 레코드를 인쇄하십시오.

  2. 2

    어레이의 각 열에서 최소 및 최대 값을 구하는

  3. 3

    C prgram에서 일련의 숫자에서 최대 및 최소 값 찾기 (내 코드 오류)

  4. 4

    자바에서 배열의 최소 및 최대 값을 찾기

  5. 5

    이전 9 개 행의 최소값 및 최대 값 찾기

  6. 6

    MPI 링 토폴로지를 사용하여 각 프로세서의 로컬 최대 값을 비교하여 함수의 전역 최대 값 찾기

  7. 7

    두 열의 최대 값을 사용하여 레코드 선택

  8. 8

    Group By 및 Join 문을 사용하여 최대 및 최소값 찾기

  9. 9

    연관 배열 PHP의 최소 및 최대 키와 값 찾기

  10. 10

    테이블의 각 레코드에 대해 최소 및 최대를 사용하여 열을 업데이트합니다.

  11. 11

    재귀 및 루프 없음을 사용하여 중첩 목록 파이썬의 최소 최대 값 찾기

  12. 12

    Oracle 테이블 레코드를 배치로 분할하고 열의 최소값을 최대로 얻습니다.

  13. 13

    R의 인구 비율 및 최소 / 최대 기준을 사용하여 영역에 값을 분배합니다.

  14. 14

    각 그룹의 각 값을 그룹의 최소값과 비교

  15. 15

    R의 최소값 및 열 값을 기반으로 새 필드를 만드는 방법

  16. 16

    인덱스를 사용하여 각 열의 최소값 찾기

  17. 17

    최대 및 최소 값을 기반으로하는 Ag 그리드 셀 선형 그래디언트 색상

  18. 18

    코드에서 WKInterfaceSlider에 최소 및 최대 값 할당

  19. 19

    레코드 목록의 최대 값

  20. 20

    awk를 사용하여 문자가있는 줄을 무시하여 필드의 최대 값을 찾는 방법은 무엇입니까?

  21. 21

    열의 최소 및 최대 행 찾기 및 다른 열의 값 빼기

  22. 22

    열에서 일치하는 값 및 일치하는 값의 최소 / 최대 값 타임 스탬프를 기반으로 데이터 프레임 필터링

  23. 23

    특정 필드 값을 포함하는 두 개의 최신 및 가장 오래된 문서 찾기

  24. 24

    icCube-최소 및 최대 값을 기반으로하는 InterpolateRGBColors?

  25. 25

    icCube-최소 및 최대 값을 기반으로하는 InterpolateRGBColors?

  26. 26

    Azure Logic App을 사용하여 생성 된 필드의 최대 값을 기반으로 SharePoint 목록에서 레코드 선택

  27. 27

    R의 여러 데이터 프레임에서 각 셀의 최대 값 찾기

  28. 28

    MySQL-여러 열에서 10 개 레코드의 "최대"절대 값을 찾으십니까?

  29. 29

    R은 다른 행을 기반으로 각 그룹의 최소값과 최대 값을 찾습니다.

뜨겁다태그

보관