여러 부분으로 구성된 파일이 있습니다. 각 부분은 특정 제목으로 시작하지만 모든 부분은 동일한 문자열로 끝납니다. 각 부분의 내용을 정렬하지 않고 제목을 기준으로 파일 부분을 정렬하고 싶습니다(예: 전체 섹션 처리). 하나의 블록으로) 입력 여부에 대한 아이디어를 명확히하기 위해 각 두 섹션 사이에 빈 줄도 있습니다.
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'
- 빈 줄에 빈 문자 넣기
sort
null 문자를 구분 기호로 사용(-z
)- 마지막으로 빈 구분 기호를 새 줄로 바꾸십시오
tr
. - 출력의 첫 번째 줄과 마지막 줄에서 빈 줄을 제거하려면 다음을 추가하면 됩니다.
| sed '1{/^$/d};${/^$/d}'
산출:
string2
x
z
y
f
string
string5
z
y
x
string
(누군가 \x0
GNU가 아닌 작업 에 도움을 줄 수 있을 수도 있습니다 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