Использование WGET для извлечения всех имен файлов из индекса

Если ваша проблема в том, что порядок лексический, а не числовой, вы можете использовать zsh и выполнить:

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

Квалификатор глобуса n заставляет сортировку быть числовой.

Если использование zsh не является вариантом, но ваш ls является вариантом GNU, альтернативой является использование GNU ls s -v Параметр для версии sort:

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

Да, это анализ вывода ls и с использованием eval в той же команде !

Но здесь это безопасно, поскольку ls с - quoting-style = shell-always выводит в точном формате, ожидаемом eval .

Чтобы добавить заголовки строк и столбцов:

{
  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

2
02.06.2016, 18:20
0 ответов

Теги

Похожие вопросы