Saya sedang mengerjakan skrip yang membaca tajuk beberapa file (gambar medis), memfilter data dan kemudian membuat direktori file berdasarkan data itu. Tetapi ada jutaan gambar dan saya harus membuatnya lebih cepat dalam suatu tugas. Setelah membaca gambar, skrip membuat blok informasi yang saya perlu filter, menukar huruf beraksen dengan huruf normal, menukar ruang apa pun untuk garis bawah, dan kemudian menghapus karakter apa pun selain " AZ, AZ, 0-9, _ ) (] [- " . Saat ini saya menggunakan perintah SED dan Tr seperti yang ditunjukkan di bawah ini, Apakah ada cara yang lebih cepat untuk melakukan ini? TIA
BLOCK=$( command to read the images )
FILTER=$( echo $BLOCK | tr 'ÁÉÍÓÚáéíóúçÇ ^\' 'AEIOUaeioucC_:' | sed -e 's/[^A-_a-z0-9() -]//g' )
command to read the images
? Saya hampir yakin bahwa ini membutuhkan waktu yang lebih lama daripadaecho .. | tr ... | sed ...
pipeline, jadi mengoptimalkannya tidak akan membantu (walaupun Anda hanya dapat pergi dengantr
kinerja kecil di sini)Jawaban:
Ini tidak membahas bagian "cara tercepat" dari pertanyaan: lebih banyak ulasan kode
echo "$BLOCK"
"hapus sembarang karakter selain" AZ, AZ, 0-9, _) (] [- "->
di mana
-d
berarti "hapus" dan-c
berarti "pelengkap set yang diberikan".[:alnum:]
adalah kelas karakter yang cocok dengan huruf dan angka.sumber