Điểm:0

bash: sắp xếp các tệp theo một số bên trong chúng

lá cờ us

Tôi cần tạo 100 tệp .txt với một số ngẫu nhiên bên trong mỗi tệp.Sau đó, tôi cần đổi tên các tệp sao cho tên tệp được đặt tên từ 1.txt thành 100.txt theo thứ tự tăng dần dựa trên giá trị được lưu trữ bên trong mỗi tệp. Tệp có tên 1.txt nên có số nhỏ nhất được lưu trong đó và tệp có tên 100.txt nên có số lớn nhất được lưu trong đó

Tôi đã thử mã này:

#!/bin/bash
cho tôi bằng $(seq 1 100)
làm
tiếng vang $RANDOM > ${i}.txt
xong
con mèo *.txt | loại
lá cờ us
Tôi đã kiểm tra tập lệnh cuối cùng, nhưng các tệp không được đặt tên từ 1.txt đến 100.txt, tôi có nhầm lẫn không?
karel avatar
lá cờ sa
Cảm ơn đã làm rõ câu hỏi của bạn. Tôi đã chỉnh sửa tập lệnh cuối cùng để các tệp đầu ra được đặt tên từ 1.txt đến 100.txt như bạn yêu cầu.
lá cờ us
Cảm ơn vì đã giúp tôi ra ngoài!
karel avatar
lá cờ sa
Câu hỏi của bạn bây giờ rõ ràng hơn nhiều.
Điểm:0
lá cờ sa

Tạo một thư mục mới và đặt tên cho thư mục là bất kỳ tên nào bạn chọn. Thay đổi thư mục với đĩa CD vào thư mục mới mà bạn đã tạo, để tất cả các tệp được tạo bởi tập lệnh shell sẽ được tạo bên trong thư mục mới và chỉ những tệp mới tạo này mới được đổi tên. Sau đó chạy tập lệnh shell sau.

#!/bin/bash
cho tôi bằng $(seq 1 100)
làm
echo $RANDOM > ${i}.txt # Đặt một số ngẫu nhiên bên trong mỗi tệp.
mv ${i}.txt $(head -1 ${i}.txt).txt # Đổi tên tệp.
xong
ls *.txt | sort -n # Sắp xếp các tệp theo thứ tự tăng dần.

Câu hỏi của bạn không rõ ràng vì tôi cũng có thể đổi tên các tệp theo thứ tự tăng dần bằng các tên mới nằm trong khoảng từ 1.txt đến 100.txt. Nếu đó là cách bạn muốn các tệp được đổi tên, hãy sử dụng tập lệnh shell này để thay thế.

#!/bin/bash
cho tôi bằng $(seq 1 100)
làm
echo $RANDOM > ${i}.txt # đặt một số ngẫu nhiên bên trong mỗi tệp
mv ${i}.txt $(head -1 ${i}.txt).txt # đổi tên tệp
xong
# ls *.txt | sort -n # Tôi đã nhận xét dòng này và thêm một dòng mới sau nó.
i=1; cho tên tệp trong `ls *.txt | sắp xếp -n`; làm mv "$filename" "$((i++)).txt"; xong
Doug Smythies avatar
lá cờ gn
Câu hỏi có vẻ giống như một câu hỏi loại bài tập về nhà, và như vậy tôi nghĩ chúng ta không nên đưa ra câu trả lời.
karel avatar
lá cờ sa
@DougSmythies Tôi thông cảm với bạn, nhưng sự đồng thuận của cộng đồng Ask Ubuntu trong 10 năm qua là các tập lệnh bash shell nằm trong chủ đề tại Ask Ubuntu và các bài tập lập trình bằng các ngôn ngữ lập trình khác bao gồm cả bài tập về nhà bằng các ngôn ngữ lập trình khác là không có chủ đề. Cách duy nhất của bạn là gửi yêu cầu thảo luận về vấn đề này tới Ask Ubuntu Meta. Tôi rất sẵn lòng chấp nhận bất kỳ sự đồng thuận nào của cộng đồng Ask Ubuntu về vấn đề này.
Điểm:0
lá cờ ar

Trước tiên, bạn có thể tạo tất cả các số ngẫu nhiên của mình, sau đó sắp xếp chúng trước khi ghi chúng vào tệp:

cho i trong {1..100}; làm
    tiếng vang $RANDOM
xong \
| sắp xếp -n \
| trong khi đọc n; làm
     (( x+=1 ))
     tiếng vang "$n" > "$x.txt"
  xong

Hoặc giống như một lớp lót:

cho i trong {1..100}; lặp lại $RANDOM; xong | sắp xếp -n | trong khi đọc n; làm (( x+=1 )); echo "$n" > "$x.txt"; xong

Cũng lưu ý rằng để có loại sắp xếp các chuỗi số theo số, bạn cần --numeric-sort (hoặc -N) Tùy chọn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.