Ordene los directorys y files en cada directory en order ascendente y exporte los datos a csv

Tengo 30 directorys, tengo más de 300 files de text en cada uno, todos los files de text en cada directory tienen el mismo formatting de nomenclatura

regional_vol_GM1.txt regional_vol_GM2.txt regional_vol_GM*.txt 

Me gustaría orderar los directorys y files de text en order secuencial y exportar los datos en cada file al file csv

A continuación está el guión que he escrito

 for dir in * ; do paste -s -d ',' <(tail -q -n 1 "$dir"/t1/regional_vol*.txt ) >> data.csv done 

El file csv de salida que obtengo no está orderado, cómo puedo orderar todos los files en mi directory en order ascendente y exportar los datos a csv

Related of "Ordene los directorys y files en cada directory en order ascendente y exporte los datos a csv"

Si su problema es que el order es léxico en lugar de ser numérico, puede usar zsh y hacer:

 for dir in *(n/); do tail -q -n 1 "$dir"/t1/regional_vol*.txt(n) | paste -s -d ',' - done > data.csv 

El calificador n glob hace que la sorting sea numérica.

Si usar zsh no es una opción, pero su ls es la de GNU, una alternativa es usar la opción -v GNU ls para orderar la versión :

 eval "dirs=($(ls -v --quoting-style=shell-always))" for dir in "${dirs[@]}"; do eval "files=($( ls -vd --quoting-style=shell-always -- "$dir"/t1/regional_vol*.txt))" tail -q -n 1 -- "${files[@]}" | paste -sd , - done > data.csv 

Sí, eso es analizar la salida de ls y usar eval en el mismo command!

Pero aquí, es seguro ya que ls con --quoting-style=shell-always el formatting exacto esperado por eval .

Para agregar sus encabezados de fila y columna:

 { eval "dirs=($(ls -v --quoting-style=shell-always))" headers_done=false for dir in "${dirs[@]}"; do ( cd -- "$dir/t1" || exit eval "files=($( ls -vd --quoting-style=shell-always regional_vol*.txt))" if ! "$headers_done"; then printf DIR printf ',%s' "${files[@]}" printf '\n' headers_done=true fi printf %s, "$dir" tail -q -n 1 -- "${files[@]}" | paste -sd , - ) done } > data.csv