나는 이 스크립트를 따르고 각 줄에서 무슨 일이 일어나고 있는지 이해하려고 노력하고 있습니다. 다음 줄에서 추출여기여기에는 일부 필드를 정렬하는 작업이 포함됩니다. 14번째 예에서는여기-k2,5
이는 2열과 5열(숫자 열)이 정렬되고, -k9
9열(비숫자 열)이 정렬된다는 의미입니다 .
# Process the STMs
cat db/TEDLIUM_release1/$set/stm/*.stm | sort -k1,1 -k2,2 -k4,4n | \
sed -e 's:<F0_M>:<o,f0,male>:' \
-e 's:<F0_F>:<o,f0,female>:' \
-e 's:([0-9])::g' \
-e 's:<sil>::g' \
-e 's:([^ ]*)$::' | \
awk '{ $2 = "A"; print $0; }'
} | local/join_suffix.py db/TEDLIUM_release1/TEDLIUM.150K.dic > data/$set/stm
그러나 위의 스니펫(정렬 -k1,1 -k2,2 -k4,4n), 매핑 -k1,1
되며 3개의 그룹도 있습니다. 누구든지 내가 이것을 이해하도록 도와줄 수 있나요?
답변1
에서 man sort
:
-k, --key=POS1[,POS2]
start a key at POS1 (origin 1), end it at POS2 (default end of line)
...
POS is F[.C][OPTS], where F is the field number and C the character position
in the field; both are origin 1. If neither -t nor -b is in effect,
characters in a field are counted from the beginning of the preceding
whitespace. OPTS is one or more single-letter ordering options, which
override global ordering options for that key. If no key is given, use the
entire line as the key.
귀하가 게시한 링크의 14번째 예는 단순히 올바르지 않습니다. 위의 맨 페이지에서 발췌한 내용을 -k2,5
보면 정렬이 "키 2와 5를 기준으로" 수행되지 않고 필드 2에서 수행된다는 것이 분명합니다.통과하다5. 모두 함께 정렬 키로 간주됩니다.
(BTW: 무작위 온라인 소스의 코드 예제는 명령이 수행하는 작업에 대한 대략적인 아이디어를 얻는 데 유용하지만 명령을 드릴다운하고 실제로 이해하고 싶을 때는이해하다무슨 일이에요,매뉴얼 페이지를 읽는 것(또는 최소한 참고하는 것)을 대체할 수 있는 방법은 없습니다..);)