Linux에서는 sort
명령을 실행하여 파일 내용을 정렬할 수 있지만 제 경우에는 다음 파일(THANKS.txt)이 있습니다.
These people have contributed to OSN Envoy. We always try to keep this list updated and correct.
If you notice that your name is not listed here, then feel free to contact us.
Ar Rakin
Peter Williamson
David Brook
Bill Natt
이 파일에는 소프트웨어 프로젝트에 기여한 사람의 목록이 포함되어 있습니다.
명령을 사용하여 이름을 알파벳순으로 정렬하고 싶습니다. sort
어떤 아이디어가 있습니까?
답변1
그리고 awk
:
awk '
NR == 1, NF == 0 {
# print and skip all lines until the first blank
# one (one where the Number of Fields is 0)
print; next
}
{print | "sort"} # pass the rest to sort
' < file
첫 번째 빈 줄 대신 세 번째 줄에서 멈추려 NF == 0
면 바꾸세요 .NR == 3
awk
and를 거치지 않으려면 (그리고 이 간단한 명령줄을 해석하기 sort
위해 추가 셸을 실행하지 않으려면 ) 다음을 수행할 수 있습니다.awk
sort
{
sed '/[^[:blank:]]/!q'
sort
} < file
여기서 uits는 공백이 아닌 문자( )를 포함 sed
q
하지 않는 첫 번째 줄을 찾습니다 . !
세 번째 줄을 sed 3q
uit로 변경합니다.q
입력이 검색 가능하지 않은 경우(예: 파이프에서 오는 경우) sed
해당 줄 구분 기호 뒤의 파일에 커서를 유지할 수 없습니다. 이는 sort
읽었을 수 있는 추가 데이터가 누락된다는 의미입니다 sed
(예: 파이프에서 읽은 경우). 더 큰 덩어리가 들어갑니다).
GNU 구현을 사용하면 너무 많이 읽는 것을 피하기 위해 입력을 한 번에 한 바이트씩 읽도록 하는 옵션을 sed
추가할 수 있습니다 .-u
답변2
이렇게 하면 정렬된 이름 목록이 제공됩니다.
sed '1,/^$/d' <THANKS.txt | sort
파이프는 sed
첫 번째 행부터 첫 번째 빈 행까지 모든 항목을 제거하고 나머지는 sort
정렬에 전달하는 데 사용됩니다. /^$/
더 쉬운 경우 위 또는 이 답변의 다른 명령에서 정규식 주소 대신 빈 줄의 줄 번호를 사용할 수도 있습니다 .
파일의 초기 부분을 전달할 수 있습니다.
sed '1,/^$/!d' <THANKS.txt
d
이 명령은 기본적으로 명령 조건을 반전시켜 sed
이름 목록을 추출하는 대신 삭제합니다.
이 두 명령을 함께 사용하면 전체 문제를 해결하고 THANKS-sorted.txt
출력 파일을 만들 수 있습니다.
{ sed '1,/^$/!d' <THANKS.txt; sed '1,/^$/d' <THANKS.txt | sort; } >THANKS-sorted.txt
또는 더 나은 형식을 사용하세요.
{
sed '1,/^$/!d' <THANKS.txt
sed '1,/^$/ d' <THANKS.txt | sort
} >THANKS-sorted.txt
ed
편집자 와 함께 :
printf '%s\n' '1,/^$/ p' '+,$ w !sort' 'q' | ed -s THANKS.txt >THANKS-sorted.txt
이는 ed
다음과 같은 편집 스크립트를 사용합니다.
1,/^$/ p
+,$ w !sort
q
이 편집 스크립트는 첫 번째 빈 줄까지 처음 몇 줄을 출력합니다. 그런 다음 빈 줄 다음 줄부터 문서 끝까지 모든 줄을 기록하여 sort
정렬된 이름을 출력합니다.
편집기는 결국 q
종료되고 최종 리디렉션은 결과 텍스트를 작성합니다 THANKS-sorted.txt
.
답변3
head
명령이 닫히지 않으면 ( stdin
Linux가 아님) 다음을 시도해 보십시오.
{ head -n2; sort; } < file
These people have contributed to OSN Envoy. We always try to keep this list updated and correct.
If you notice that your name is not listed here, then feel free to contact us.
Ar Rakin
Bill Natt
David Brook
Peter Williamson
stdin이 닫혀 있으면 head
다음과 같이 시도하십시오.
{ read TMP; echo "$TMP"; read TMP; echo "$TMP"; sort; } < file
These people have contributed to OSN Envoy. We always try to keep this list updated and correct.
If you notice that your name is not listed here, then feel free to contact us.
Ar Rakin
Bill Natt
David Brook
Peter Williamson