Tôi có một tệp như thế này:
FirstName, FamilyName, Address, PhoneNumber
Làm cách nào để sắp xếp nó theo FamilyName?
Tôi có một tệp như thế này:
FirstName, FamilyName, Address, PhoneNumber
Làm cách nào để sắp xếp nó theo FamilyName?
Câu trả lời:
Nếu đây là UNIX:
sort -k 2 file.txt
Bạn có thể sử dụng nhiều -k
cờ để sắp xếp trên nhiều cột. Ví dụ: để sắp xếp theo họ, sau đó đến tên làm ngắt dây:
sort -k 2,2 -k 1,1 file.txt
Các tùy chọn có liên quan từ "man sort":
-k, --key = POS1 [, POS2]
bắt đầu khóa tại POS1, kết thúc khóa tại POS2 (điểm gốc 1)
POS là F [.C] [OPTS], trong đó F là số trường và C là vị trí ký tự trong trường. OPTS là một hoặc nhiều tùy chọn đặt hàng gồm một chữ cái, sẽ ghi đè các tùy chọn đặt hàng toàn cầu cho khóa đó. Nếu không có khóa nào được cung cấp, hãy sử dụng toàn bộ dòng làm khóa.
-t, - trường-phân tách = SEP
sử dụng SEP thay vì chuyển tiếp không trống sang trống
--field-separator=','
nếu bạn có thể có toán tử nhập dữ liệu nhập các giá trị cho "First name" như "Billy Bob" hoặc bất cứ thứ gì ... khoảng trắng có thể dễ dàng xâm nhập vào dữ liệu của bạn nếu bạn không đề phòng nó, nhưng dấu phẩy tương đối khó xảy ra.
-b
tùy chọn. Điều này là do sort
thực sự đang xem xét rằng chuỗi để sắp xếp bắt đầu ngay sau dấu phẩy chứ không phải từ chữ cái đầu tiên của cột. Ngoài ra, bạn có thể cần phải đặt trước lệnh bằng LC_ALL=C
, để tránh bất kỳ tác dụng phụ nào do ngôn ngữ, điều này có thể xảy ra ngay cả trên một tệp ASCII đơn giản.
-b
( --ignore-leading-blanks
). Để làm rõ một chút: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
cho a<SPACE><SPACE>b
trước (cột thứ hai bắt đầu sau cột đầu tiên non-blank to blank transition
và <SPACE><SPACE>b
trước đó <SPACE>a
), nhưng với -b
nó cho aa<SPACE>a
như mong đợi ( a
là trước b
).
sort -nk2 file.txt
Theo đó bạn có thể thay đổi số cột.