문자열의 일부에 대해 수치 비교를 수행한 다음 일치하는 줄을 출력하려면 어떻게 해야 합니까?

문자열의 일부에 대해 수치 비교를 수행한 다음 일치하는 줄을 출력하려면 어떻게 해야 합니까?

입력할 다음 줄이 있다고 가정해 보겠습니다 awk.

dolly-cabinet-93-red
murfy-swan-96-white
chizzle-rock-115-green

-세 번째 열에서 가장 큰(숫자) 행을 선택 하고 해당 행을 출력하는 방법(바람직하게는 를 사용 awk하지만 이에 국한되지 않음)은 무엇입니까?

왠지 96 솔루션이 가장 큰 것 같아요.

답변1

나는 당신이 어떤 종류의 정렬을 하고 있다고 추측하고 있으며 이 정렬은 숫자 순서가 아닌 사전식 순서로 수행됩니다. 이 경우 (after 때문에 ) 96이후에 정렬됩니다 .11591


awk -F '-' '$3 > max { max = $3; line = $0 } END { print line }' file

주어진 데이터에 대해 다음이 출력됩니다.

chizzle-rock-115-green

코드는 구분된 세 번째 -필드를 현재 발견된 가장 큰 숫자( )와 max비교합니다 . 필드의 숫자가 더 높으면 max해당 숫자로 업데이트되고 현재 입력 줄이 에 저장 됩니다 line.line

이는 선형 작업이므로 정렬보다 약간 빠르지만(정렬은 기껏해야 O(n*log(n))) 데이터가 많지 않으면 큰 차이를 느끼지 못할 것입니다.

답변2

sort+ 사용의 대안 head:

sort -t'-' -k3nr file | head -1

산출:

chizzle-rock-115-green

관련 정보