awk를 사용하여 두 줄 비교

awk를 사용하여 두 줄 비교

입력하다

aaaaa|bbbbb|ccccc|ddddd|5|5|4
aaaaa|bbbbb|ccccc|ddddd|10|10|1
wwwww|xxxxx|yyyyy|zzzzz|5|5|2
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

산출

aaaaa|bbbbb|ccccc|ddddd|5|5|
wwwww|xxxxx|yyyyy|zzzzz|10|10|

인덱싱에 사용되는 것은 다음과 같습니다.

열 1~4(예: aaaaa|bbbbb|ccccc|ddddd)

출력 논리는 다음과 같습니다.

  1. 동일한 인덱스를 가진 레코드의 마지막 열을 비교하여 마지막 열 값이 높은 레코드가 출력에 인쇄됩니다.

  2. 마지막 열의 동일한 인덱스를 가진 레코드를 비교하여 같으면 5열과 6열의 값이 더 큰 레코드를 출력한다.

답변1

sort간단히 ing 을 사용하고 각 그룹의 첫 번째 항목을 선택하면 됩니다 .

sort filename -t'|' -k1,4 -k7rn -k5,6rn | sort -t'|' -k1,4 -u

결과:

aaaaa|bbbbb|ccccc|ddddd|5|5|4
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

이것은 무엇을 위한 것인가?

  • -t'|'필드 구분 기호를 다음으로 설정하세요.|
  • -k1,4처음 4개 필드를 기준으로 정렬
  • -k7rn그런 다음 일곱 번째 필드를 통해 역방향 및 수치 비교를 수행합니다.
  • -k5,6rn그러면 다섯 번째, 여섯 번째 게임도 마찬가지다.
  • |다른 유형으로 전달
  • -k1,4 -u -u처음 4개 필드의 고유성을 나타냅니다 .

따라서 전체 작업은 원하는 행이 처음 4개 필드 그룹에서 먼저 나타나도록 원하는 방식으로 파일을 정렬하는 것과 같습니다. 그런 다음 각 그룹의 첫 번째 행을 가져옵니다.

관련 정보