파일의 일부를 알파벳순으로 정렬하는 방법은 무엇입니까?

파일의 일부를 알파벳순으로 정렬하는 방법은 무엇입니까?

여러 부분으로 구성된 파일이 있습니다. 각 부분은 특정 제목으로 시작하지만 모든 부분은 동일한 문자열로 끝납니다. 각 부분의 내용을 정렬하지 않고 제목을 기준으로 파일 부분을 정렬하고 싶습니다(예: 전체 섹션 처리). 하나의 블록으로) 입력 여부에 대한 아이디어를 명확히하기 위해 각 두 섹션 사이에 빈 줄도 있습니다.

string5
z
y
x
string

string2
x
z
y
f
string

원하는 출력은 다음과 같습니다.

string2
x
z
y
f
string

string5
z
y
x
string

답변1

GNU를 사용 sed하고 다음을 수행하십시오 sort.

sed 's/^$/\x0/g' file | sort -z | tr '\0' '\n'
  • 빈 줄에 빈 문자 넣기
  • sortnull 문자를 구분 기호로 사용( -z)
  • 마지막으로 빈 구분 기호를 새 줄로 바꾸십시오 tr.
  • 출력의 첫 번째 줄과 마지막 줄에서 빈 줄을 제거하려면 다음을 추가하면 됩니다.| sed '1{/^$/d};${/^$/d}'

산출:

string2
x
z
y
f
string

string5
z
y
x
string

(누군가 \x0GNU가 아닌 작업 에 도움을 줄 수 있을 수도 있습니다 sed.관련 질문)

답변2

단락 모드에서 GNU를 사용 awk하고 문자열 모드에서 배열 값을 정렬하고 인쇄합니다.

awk -v RS= '{ seen[NR]=$0 }
END { PROCINFO["sorted_in"]="@val_str_asc";
      for (block in seen) {print sep seen[block]; sep=ORS}
}' infile

답변3

그리고 perl:

perl -l -00 -e '
  chomp(@paragraphs = <>);
  print join "\n\n", sort @paragraphs' your-file

관련 정보