Linux seq
lệnh tạo danh sách các số trong nháy mắt. Nhưng làm thế nào để chức năng này có thể được sử dụng trong thực tế? Chúng tôi sẽ chỉ cho bạn cách seq có thể hữu ích cho bạn.
Lệnh seq
Thoạt nhìn, Linux seq
lệnh dường như là một cái gì đó kỳ lạ. Nó cho phép bạn tạo chuỗi số một cách nhanh chóng và thế là xong! Tuy nhiên, từ khóa ở đây là “nhanh chóng”. Trong giây lát, bạn sẽ thấy lệnh nhỏ này có thể chạy nhanh như thế nào.
Tuy nhiên, bất kể chúng được tạo ra như thế nào, danh sách các số hữu ích như thế nào? Các seq
lệnh đã được thêm vào phiên bản thứ 8 của Unix vào năm 1985. Nó đã tồn tại từ đó, vì vậy nó phải làm được điều gì đó đáng giá.
Triết lý của Unix là nó có đầy đủ các tiện ích nhỏ để làm một việc và làm tốt điều đó. Một trong những nguyên lý trung tâm của triết lý này là viết các chương trình chấp nhận đầu vào từ các chương trình khác. Tất nhiên, điều đó cũng có nghĩa là các chương trình này phải tạo ra đầu ra có thể được sử dụng làm đầu vào cho các chương trình khác.
Các seq
Lệnh trở thành của riêng nó khi nó được sử dụng với các lệnh khác sử dụng đầu ra của nó, thông qua các đường ống hoặc mở rộng dòng lệnh.
Tạo danh sách cơ bản
Nếu bạn khởi chạy seq
với một số duy nhất làm tham số dòng lệnh, nó sẽ đếm từ một đến số đó. Sau đó, nó in các số trong cửa sổ đầu cuối, một số trên mỗi dòng, như hình dưới đây:
seq 6
Nếu bạn nhập hai số trên dòng lệnh, số đầu tiên sẽ là số bắt đầu và số thứ hai sẽ là số kết thúc, như hình dưới đây:
seq 4 10
Bạn có thể đặt kích thước bước bằng cách thêm số thứ ba. Nó nằm giữa số bắt đầu và số kết thúc. Chúng tôi gõ sau để hỏi seq
để tạo danh sách các số bắt đầu bằng sáu, kết thúc bằng 48 và sử dụng bước sáu:
seq 6 6 48
Đếm ngược
Chúng tôi cũng có thể hỏi seq
để tạo danh sách các số từ cao nhất đến thấp nhất. Tuy nhiên, để làm như vậy, chúng ta phải cung cấp một bước phủ định.
Lệnh sau tạo ra một danh sách đếm từ 24 đến 12 trong các bước 6 vì chúng ta nhập bước dưới dạng số âm:
seq 24 -6 12
Đếm với số thập phân
Số bắt đầu, số kết thúc và số bước cũng có thể là số thập phân. Nếu bất kỳ số nào là số thập phân, các số khác cũng được coi là số thập phân. Lệnh sau tạo danh sách các số với bước 0,2:
seq 1 0.2 2
Tốc độ của seq
seq
cực kỳ nhanh — nút thắt cổ chai duy nhất là thời gian bạn phải nhập lệnh trong cửa sổ đầu cuối. Để kiểm tra tốc độ của nó, chúng ta hãy yêu cầu một danh sách 250.000 con số.
Chúng tôi gõ như sau, sử dụng time
để xem quá trình mất bao lâu để hoàn thành:
time seq 250000
Kết quả được hiển thị bên dưới danh sách. Ngay cả trên PC thử nghiệm được cấp nguồn vừa phải của chúng tôi, seq
nhanh một cách đáng ngạc nhiên.
Toàn bộ danh sách được tạo và ghi ra màn hình trong khoảng 1/3 giây. Nếu chúng tôi chuyển hướng danh sách thành một tệp, chúng tôi thậm chí có thể tránh được việc nhập vào cửa sổ dòng lệnh.
Để làm như vậy, chúng tôi nhập như sau:
time seq 250000 > numbers.txt
Thời gian để hoàn thành danh sách và tạo tệp bây giờ là khoảng 1/7 giây.
Sử dụng dấu phân tách
Một ký tự dòng mới là ký tự mặc định được hiển thị giữa mỗi số trong danh sách. Đó là lý do tại sao chúng xuất hiện dưới dạng danh sách dọc, với mỗi số trên một dòng riêng. Nếu cần, bạn có thể cung cấp một dấu phân tách khác.
Ví dụ: giả sử bạn cần tạo danh sách được phân tách bằng dấu phẩy, danh sách được chia bằng dấu hai chấm hoặc bất kỳ dấu câu hoặc ký hiệu nào khác. Dấu phân cách thực sự là một chuỗi, vì vậy bạn có thể sử dụng nhiều hơn một ký tự.
Chúng tôi sẽ sử dụng -s
(dấu phân cách) tùy chọn. Lệnh sau sẽ tạo ra một danh sách được phân tách bằng dấu phẩy:
seq s, 6 6 36
Lệnh này sẽ sử dụng dấu hai chấm (:
) làm dấu phân tách:
seq -s: 6 6 36
Lệnh này cho biết seq
để sử dụng hai dấu gạch nối (-
) làm dấu phân tách:
seq -s-- 6 6 36
Sử dụng chuỗi định dạng
Các seq
lệnh cũng hỗ trợ chuỗi định dạng kiểu ngôn ngữ C. Những điều này cho phép bạn định dạng đầu ra với nhiều quyền kiểm soát hơn là chỉ xác định một dấu phân cách. Để sử dụng một chuỗi định dạng, bạn sử dụng -f
(định dạng) tùy chọn.
Lệnh sau cho biết seq
sử dụng các số 0 để đệm đầu ra thành hai ký tự:
seq -f "%02g" 6
Chúng ta có thể định dạng chuỗi bằng bất kỳ văn bản nào chúng ta thích và đặt số ở bất kỳ vị trí nào trong chuỗi, như sau:
seq -f "Number %02g in a C-like format string" 6
Một cách nhanh chóng để thiết lập Zero Padding
Cách nhanh nhất để đặt không đệm là sử dụng -w
(chiều rộng bằng nhau) tùy chọn. Điều này nói với seq
sử dụng các số 0 để đệm các số, vì vậy tất cả chúng đều có cùng chiều rộng với số lớn nhất.
Lệnh sau đếm từ 0 đến 1.000 trong các bước 100 và tất cả các số sẽ được đệm bằng số 0:
seq -w 0 100 1000
Số dài nhất có bốn ký tự, vì vậy tất cả các số hẹp hơn đều được đệm bằng các số 0 vào chiều rộng đó (thậm chí số 0 được đệm bằng bốn số 0).
Piping seq Into bc
Bằng cách đặt dấu phân tách dưới dạng ký hiệu toán học và đưa danh sách vào bc
lệnh, chúng ta có thể đánh giá các số trong danh sách đó.
Lệnh sau tạo một danh sách các số được phân tách bằng dấu hoa thị (*
), bắt đầu từ một và kết thúc bằng sáu:
seq -s* 6
Nếu chúng tôi cung cấp danh sách đó vào bc
, nó đánh giá danh sách bằng cách sử dụng dấu hoa thị (*
) dưới dạng các ký hiệu nhân:
seq -s* 6 | bc
Chúng ta cũng có thể làm điều này với các biểu tượng khác. Lệnh dưới đây sử dụng dấu cộng (+
) để tạo một danh sách trong đó tất cả các số được thêm vào:
seq -s+ 5
Chúng tôi nhập phần sau để chuyển nó vào bc
và đánh giá danh sách:
seq -s+ 5 | bc
Tạo tệp bằng seq
Các touch
lệnh cập nhật dấu thời gian và ngày tháng trên tệp. Nếu tệp không tồn tại, hãy chạm để tạo tệp đó. Chúng ta có thể sử dụng mở rộng dòng lệnh với touch
và seq
để tạo một bộ sưu tập các tệp được đặt tên theo chủ đề, nhưng được đánh số khác nhau.
Chúng tôi sẽ tạo một tập hợp gồm 10 tệp có cùng tên cơ sở và một số khác (tệp-1.txt, tệp-2.txt, v.v.). Chúng tôi gõ như sau:
touch $(seq -f "file-%g.txt" 1 10)
Sau đó, chúng tôi gõ như sau để kiểm tra các tệp:
ls file*
Sử dụng seq trong Bash Loops
Chúng ta có thể sử dụng seq
trong tập lệnh Bash để điều khiển các vòng lặp với số thập phân.
Nhập văn bản sau vào trình chỉnh sửa, sau đó lưu nó dưới dạng “loops.sh”:
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" done
Tiếp theo, chúng tôi gõ như sau để làm cho tập lệnh mới của chúng tôi có thể thực thi được:
chmod +x loop.sh
Khi chúng tôi chạy tập lệnh, bộ đếm vòng lặp được in trong cửa sổ đầu cuối. Sau đó, chúng ta có thể nhập như sau để xem bộ đếm vòng lặp thập phân tăng lên với mỗi lần lặp lại của vòng lặp:
./loop.sh
Nhớ lấy seq
cũng có thể đếm ngược; bạn có thể sử dụng nó trong các vòng lặp theo cách tương tự.
Đẹp và đơn giản
Một điều về seq
là không có nhiều đường cong học tập. Nó có một đoạn ngắn sảng khoái man
nhưng bạn vẫn có thể sử dụng nó theo những cách thú vị.
Vì chúng tôi thường cần nhanh chóng tạo các tệp thử nghiệm với kích thước thực tế, chúng tôi sử dụng seq
với một chuỗi định dạng. Sau đó, chúng tôi chuyển hướng đầu ra để tạo một tệp chứa nhiều dòng dữ liệu giả như chúng tôi muốn.