tập tin mèo theo thứ tự cụ thể dựa trên số trong tên tệp


12

Tôi có tập tin có tên file.88_0.pdb, file.88_1.pdb, ..., file.88_100.pdb. Tôi muốn cathọ để file.88_1.pdbđược dán sau file.88_0.pdb, file.88_2.pdbsau file.88_1.pdb, và như vậy. Nếu tôi làm như vậy cat file.88_*.pdb > all.pdb, các tệp được đặt cùng nhau theo thứ tự sau : 0 1 10 11 12 13 14 15 16 17 18 19 2 20..., v.v ... Làm thế nào để tôi đặt chúng lại với nhau để thứ tự được 0 1 2 3 4 5 6...?


1
Nhân tiện, bạn có thể quan tâm đến trang web Tin sinh học mới của chúng tôi nếu bạn đang làm việc trong lĩnh vực này.
terdon

Câu trả lời:


24

Sử dụng brace expansion

cat file.88_{0..100}.pdb >>bigfile.pdb

Để bỏ qua việc in các thông báo lỗi cho các tệp không tồn tại, hãy sử dụng:

cat file.88_{0..100}.pdb >>bigfile.pdb 2>/dev/null

Trong zshshell, bạn cũng có (n)vòng loại hình cầu để yêu cầu sắp xếp số (trái ngược với mặc định của bảng chữ cái ) cho các khối:

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null

3
cat $(for((i=0;i<101;i++)); do echo -n "file.88_${i}.pdb "; done)

hoặc, liên quan đến nhận xét của Jesse_b:

cat $(for((i=0;i<101;i++)); do test -f "file.88_${i}.pdb" && echo -n "file.88_${i}.pdb "; done)

3

Trong phần mở rộng shell w / o, bạn có thể sử dụng ls+ xargs:

ls -v file.88_*.pdb | xargs cat > all.pdb

ls sẽ sắp xếp các tập tin theo thứ tự số:

-v sắp xếp tự nhiên các số (phiên bản) trong văn bản.


2

Thử:

filedir="/path/to/files"
output="/path/to/all.pdb"
for file in $(find $filedir -type f -name "file.88_*" | sort -t "_" -k2 -n); do
    cat $file >> $output
done

Điều này có thể cho sortcác tệp trên -k2trường thứ hai ( ) sử dụng _làm dấu phân cách. Ở đây bạn phải sử dụng >>nếu không mỗi tệp mới sẽ ghi đè lên cuối cùng.


Tôi vẫn nhận được thứ tự sai:0 1 10 11 12...
sodiumnitrate

bạn đang chạy cái gì vậy nếu bạn làm sort --versionnhững gì bạn nhận được? Và bạn có -nlệnh sắp xếp đúng không?
jesse_b

OSX El Capitan,sort (GNU coreutils) 5.93
sodiumnitrate

1
Cảm ơn rất nhiều vì đã cố gắng! Việc /dev/nullbổ sung cho câu trả lời khác là rất cần thiết!
natrinitrate

1
Sử dụng vô dụng thay thế lệnh . Sử dụng một cái gì đó như find ... | sort ... | xargs cat >> $outputthay thế.
David Foerster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.