Tôi muốn sắp xếp hai tệp nhưng tôi không thể có kết quả nhất quán. Có vẻ như có vấn đề với đối chiếu nhưng tôi không thể hiểu lý do. Trong phân cách tệp mẫu là một khoảng trắng:
tập tin1:
a
b
B
A
tập tin 2:
a 1
b 0
B 1
A 0
Tôi sử dụng sort -k1,1để sắp xếp các tệp này và đầu ra là:
đã sắp xếp1:
a
A
b
B
đã sắp xếp2:
A 0
a 1
b 0
B 1
Tôi cần những tập tin được sắp xếp trong một joinvà hiện đang phàn nàn rằng một trong những tập tin không được sắp xếp.
Trong môi trường của tôi LC_COLLATEvà LC_ALLkhông được đặt, LANGđược đặt thànhen_US.UTF-8
Với LC_ALL=C sort -k1,1đầu ra là:
đã sắp xếp11:
A
B
a
b
đã sắp xếp22:
A 0
B 1
a 1
b 0
Tôi không cần một đơn đặt hàng cụ thể, tôi chỉ muốn nó có thể tham gia kết quả. Cách này joinhoạt động. Để được an toàn tôi cũng có thể thêm vào trước joinvới LC_ALL=C.
Câu hỏi của tôi
Tại sao trong sorted1 alà trước A và trong sorted2 alà sau A ? Dù đối chiếu là gì, nó dành cho cả hai sortlệnh và tôi đang sắp xếp dựa trên cột 1 giống hệt nhau trong cả hai tệp đầu vào.
Đã thêm đầu ra của ltrace -e strcoll
tập tin1
sort->strcoll("B","A") =1
sort->strcoll("a","b") =-1
sort->strcoll("a","A") =-7
a
sort->strcoll("b","A") =1
A
sort->strcoll("b","B") =-7
b
B
+++ exited (status 0) +++
tập tin2
sort->strcoll("B 1","A 0") =1
sort->strcoll("a 1","b 0") =-1
sort->strcoll("a 1","A 0") =1
A 0
sort->strcoll("a 1","B 1) =-1
a 1
sort->strcoll("b 0","B 1") =-1
b 0
B 1
+++ exited (status 0) +++
\0. Ví dụ với recode us..dump file.
LC_ALL=CDù sao join, bạn có thể muốn sử dụng , đặc biệt nếu tệp chứa các ký tự không phải ASCII vì tất cả các ngôn ngữ glibc UTF-8 đều có lỗi trong đó nhiều ký tự khác nhau và các thành phần đối chiếu giống nhau ở đó.