Tôi có một tệp (user.csv) như thế này
ip,hostname,user,group,encryption,aduser,adattr
muốn in tất cả sắp xếp cột theo người dùng,
Tôi đã thử awk -F ":" '{print|"$3 sort -n"}' user.csv
, nó không hoạt động.
Tôi có một tệp (user.csv) như thế này
ip,hostname,user,group,encryption,aduser,adattr
muốn in tất cả sắp xếp cột theo người dùng,
Tôi đã thử awk -F ":" '{print|"$3 sort -n"}' user.csv
, nó không hoạt động.
Câu trả lời:
Làm thế nào về chỉ sort
.
sort -t, -nk3 user.csv
Ở đâu
-t,
- xác định dấu phân cách của bạn là ,
.
-n
- cung cấp cho bạn sắp xếp số. Đã thêm vì bạn đã thêm nó trong nỗ lực của bạn. Nếu trường người dùng của bạn chỉ là văn bản thì bạn không cần nó.
-k3
- xác định trường (khóa). người dùng là trường thứ ba.
sort -t, -nk3 filename.csv | sort -t, -nk6
- đầu tiên nó sẽ sắp xếp theo cột 3, sau đó sẽ sắp xếp theo cột 6 để cột 6 được sắp xếp đúng theo cách và đối với bất kỳ hàng nào có cột 6 giống nhau, những hàng đó sẽ được sắp xếp theo cột 3 .
sort -t ',' -k3,3n -k6,6n
sẽ tốt hơn. -k3
sẽ sử dụng cột 3 và phần còn lại của dòng.
Sử dụng sed để xóa ID người dùng trùng lặp, giả sử rằng ID người dùng không chứa bất kỳ khoảng trắng nào.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
sort
đã biết cách sắp xếp theo một cột cụ thể, nhưng kỹ thuật này - được gọi là biến đổi Schwartzian - rất hữu ích khi trường bạn muốn sắp xếp không phải là một cột được xác định rõ ràng.
Bạn có thể chọn dấu phân cách, trong trường hợp này tôi đã chọn dấu hai chấm và in cột số một, sắp xếp theo thứ tự bảng chữ cái:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
thử đi -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
HOẶC LÀ
sort -t',' -nk3 user.csv
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Điều này sẽ hoạt động
sort -t, -k3 file