awk 텍스트 처리에서는 제한 값을 사용합니다.

awk 텍스트 처리에서는 제한 값을 사용합니다.

이런 txt 파일이 있어요

32 1
32 2
32 3
32 4
32 5
17 8
17 9
17 10
17 11
14 33
14 34
14 35

이런 txt 파일을 받고 싶어요! 그래서 우리는 필드 2에서 필드 1에 있는 값의 최소값과 최대값을 가져와서 인쇄합니다.

32 1 5
17 8 11
14 33 35

어떤 아이디어가 있나요? 감사해요.

답변1

사용datamash:

datamash -t ' ' -g 1 min 2 max 2 < file

산출:

32 1 5
17 8 11
14 33 35

답변2

사용 awk:

awk 'min[$1] == "" || $2 < min[$1] { min[$1] = $2 }
     max[$1] == "" || $2 > max[$1] { max[$1] = $2 }
     END { for (i in min) print i, min[i], max[i] }' file |
sort -rn

max이는 및 연관 배열의 첫 번째 열과 관련된 최대값과 최소값을 기억합니다 min. 모든 데이터가 처리된 후 값이 인쇄됩니다.

마지막 sort -rn것은 출력이 내림차순으로 정렬되도록 보장합니다.

답변3

입력한 내용을 기준으로 정렬:

$ awk '$1 != p{printf "%s%s",max,$0; p=$1} {max=OFS $2 ORS}  END{printf "%s", max}' file
32 1 5
17 8 11
14 33 35

관련 정보