유전자 이름과 발현 값으로 파일을 정렬하고 있습니다. 모든 파일의 정확한 라인 수는 동일하지만, 정렬 후 일부 유전자의 위치에 차이가 있습니다. 이것은 매우 이상합니다. 다음은 이러한 두 파일의 정렬된 버전입니다.
예를 들어:
Cxx1c 25.1695
Cxxc1 15.2228
Cxxc4 0.952061
Cxxc5 3.13309
**Cyb5 157.426**
Cyb561 0.425933
Cyb561a3 9.55082
Cyb561d1 4.00422
Cyb561d2 3.04411
Cyb5b 16.7622
Cyb5d1 7.25191
Cyb5d2 2.85109
Cyb5r1 15.2511
Cyb5r2 0.48748
다른 파일에도 이런 정렬이 있습니다. 기본적으로 이 파일에서는 Cyb5가 Cyb561d2 유전자 뒤에 존재합니다. 어떻게 정확히 동일한 정렬 순서를 가질 수 있습니까? 이와 같은 작업을 수행하는 매개변수가 있나요?
Cxx1c 44.9795
Cxxc1 19.0346
Cxxc4 1.17429
Cxxc5 2.71589
**Cyb561 7.11003**
Cyb561a3 1.97601
Cyb561d1 2.13004
Cyb561d2 2.03376
Cyb5 64.074
Cyb5b 14.5329
Cyb5d1 12.0212
Cyb5d2 1.47763
Cyb5r1 10.5463
Cyb5r2 0
위의 정렬된 파일을 생성하는 코드는 다음과 같습니다.
for i in *.txt; do
sort -d $i >$i.sort
done
답변1
Cyb5 157.426
첫 번째 정렬 단계에서는 로케일 공백이 무시되므로 먼저 정렬 Cyb561 0.425933
하고 Cyb5 64.074
마지막으로 정렬하므로 순서가 영어 사전 순서에 더 가깝습니다.Cyb561 7.11003
예를 들어, 사전에서는 a priori
및 사이에서 찾을 수 있습니다.apiary
Arrival
여기서는 Cyb5 157.426
첫 번째 패스와 비교합니다. 왜냐하면 Cyb561 0.425933
첫 번째 패스와 첫 번째 패스를 비교 Cyb5157.426
하기 때문입니다.Cyb5610.425933
무게공백 문자는소홀히 하다.
이러한 특수 처리를 피하려면 C
문자 코드 포인트 값만을 기준으로 하는 순서로 로케일을 변경할 수 있습니다.
LC_ALL=C sort -d file
또는 @Swiss가 말했듯이 첫 번째 필드만 정렬합니다.
sort -d -k1,1 file
그러나 필드 구분 기호는 공백이 아닌 공백에서 공백으로의 전환이며 공백은 공백입니다.예필드에 포함됩니다.
그래서:
b x
a x
sort -d -k1,1
여전히 다음과 같이 정렬됩니다 .
a x
b x
귀하의 로케일에서는 공백이 무시되기 때문에 다음과 같습니다.
b x
a x
C 로케일에서는 공백 문자가 먼저 옵니다 a
.
-b
로케일에 관계없이 선행 공백이 항상 무시되도록 옵션을 추가할 수 있습니다 . 또는 공백으로 시작하는 줄을 먼저 정렬하려면 로케일을 C로 수정하세요.
답변2
현재 전체 행을 정렬하고 있는데 첫 번째 열만 정렬하려는 것 같습니다. 현재 명령이 작성되는 방식에 따라 열은 기본적으로 함께 연결됩니다. 예를 들면 다음과 같습니다.
Cyb5 157.426 -> Cyb5157426
Cyb561 0.425933 -> Cyb5610425933
그리고
Cyb561 7.11003 -> Cyb561711003
Cyb5 64.074 -> Cyb564074
첫 번째 열만 정렬하려면 다음 명령을 사용해야 합니다.
sort -d -k1,1