file.txt
탭으로 구분됩니다.
RollNo Names Class Subject Position
101 Anna V Maths Average
102 Bob V Maths Good
103 Charles VI Science Good
104 Darwin VI Science Improve
105 Eva VII English Improve
Good
이 줄을 , , Average
순서로 표시 하도록 정렬하고 싶습니다 Improve
.
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
답변1
반면 file.txt
:
RollNo Names Class Subject Position
101 Anna V Maths Average
102 Bob V Maths Good
103 Charles VI Science Good
104 Darwin VI Science Improve
105 Eva VII English Improve
줄의 마지막 단어를 숫자로 바꿉니다. 이 숫자를 사용하여 정렬하세요. 그런 다음 이를 원래 단어로 바꿉니다.
$ sed -e 's/Good$/1/' -e 's/Average$/2/' -e 's/Improve$/3/' file.txt | sort -k5n | sed -e 's/1$/Good/' -e 's/2$/Average/' -e 's/3$/Improve/'
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
또는 해당 줄의 마지막 단어를 기준으로 각 줄 앞에 숫자를 추가한 다음 해당 숫자를 기준으로 정렬합니다. 그런 다음 첫 번째 열을 삭제합니다.
$ awk 'NR==1 {n=0} $NF=="Good" {n=1} $NF=="Average" {n=2} $NF=="Improve" {n=3} { print n, $0 }' file.txt | sort -n | cut -d' ' -f2-
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
답변2
이 스니펫:
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
pl " Input data file $FILE:"
head $FILE
pl " Sort order file:"
head data2
pl " Expected output:"
head $E
pl " Results:"
msort -q -Z -l -n 5,5 -s data2 -c lexicographic $FILE
생산하다:
-----
Input data file data1:
RollNo Names Class Subject Position
101 Anna V Maths Average
102 Bob V Maths Good
103 Charles VI Science Good
104 Darwin VI Science Improve
105 Eva VII English Improve
-----
Sort order file:
Good
Average
Improve
-----
Expected output:
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
-----
Results:
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
사용하여종류, 많은 저장소에서 발견되는 대체 정렬 코드입니다. GNU 정렬은 속도가 느리지만 여러 상황에서 유용하게 사용할 수 있는 추가 기능이 많이 있습니다. 여기의 옵션은 -Z(첫 번째 줄 복사), -l(한 줄이 하나의 레코드), -q(조용함), -n(키 필드 위치), -s(파일 정렬, 줄당 하나의 키), -c( 비교형).
이것은 다음과 같은 시스템에 있습니다.
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution : Debian 8.9 (jessie)
bash GNU bash 4.3.30
msort에 대한 일부 세부 정보:
msort sort records in complex ways (man)
Path : /usr/bin/msort
Version : 8.53
Type : ELF64-bitLSBexecutable,x86-64,version1(SYSV ...)
Help : probably available with -h,--help
Repo : Debian 8.9 (jessie)
Home : http://www.billposer.org/Software/msort.html (pm)
행운을 빕니다... 건배, drl