목록을 숫자 및 알파벳순으로 정렬

목록을 숫자 및 알파벳순으로 정렬

가장 일반적인 단어를 알파벳순으로 정렬하여 찾으려고 합니다. 예를 들어:

  2 went
  2 wonder
  2 wont
  3 began
  3 little
  3 moment
  3 rabbit
  3 thing
  3 till
  4 alice
  4 bottle
  4 came
  4 sure
  4 window

출력은 다음과 같아야 합니다 alice(가장 높은 값을 가진 단어이며 알파벳 순서의 첫 번째 단어임).

지금 하고 있는데 sort -nr다음에 무엇을 해야 할지 모르겠습니다.

답변1

두 필드를 기준으로 정렬하려면 해당 필드가 무엇인지, 정렬 방법을 알려주어야 합니다. 예를 들면 다음과 같습니다.

sort -k1,1nr -k2b < input

필드 1( )을 기준으로 -k1,1숫자를 기준 으로 필드 1이 동일한 행의 경우 -k2행의 나머지 부분( )을 기준으로 두 번 정렬합니다. 일반적으로 b정렬 키( )의 선행 공백 (어휘적으로)을 제외합니다. 첫 번째 및 두 번째 필드). 예제 입력의 출력은 다음과 같습니다.

  4 alice
  4 bottle
  4 came
  4 sure
  4 window
  3 began
  3 little
  3 moment
  3 rabbit
  3 thing
  3 till
  2 went
  2 wonder
  2 wont

답변2

Jeff는 를 사용하여 귀하의 질문에만 답변했지만 sort어쨌든 내 방법을 게시하겠다고 생각했습니다. 두 필드를 모두 기준으로 정렬하는 기능 에 대해 몰랐기 sort때문에 입력을 "사전" 정렬하는 데만 사용했습니다. 각 섹션의 단어는 ZA별로 정렬되어 있으므로 순서를 바꾸면 됩니다. 이를 위해 다음을 사용하고 있습니다 awk.

sort -r file | awk '{if($1==x){var=$0"\n"var} else{print var;var=$0;x=$1}} END{print var}' | grep -v ^$

그것이 하는 일은 grep -v ^$비어 있는 출력의 첫 번째 줄을 삭제하는 것뿐입니다.awk

관련 정보