Пропустить первую строку (или больше) в CSV-файле, который используется для переименования файлов

Я использовал информацию из другого вопроса в Stack Exchange, чтобы разрешить мне переименовывать файлы, используя информацию в файле csv. Эта строка позволяет мне переименовать все файлы из имен в столбце 1, в имена в столбце 2.

while IFS=, read -r -a arr; do mv "${arr[@]}"; done <$spreadsheet 

Однако он пытается сравнить информацию в верхней строке. Я хотел бы иметь возможность включать некоторый код, который позволяет мне пропускать строки. Было бы также неплохо получить лучшее представление о том, как работает эта строка кода. Я бы подумал, что это будет включать некоторую информацию о столбцах (например, A и B), но я не вижу никакой информации, которая связана с этим, и как noob, пытающийся разобраться в этом языке. Было бы хорошо знать как это работает. Любая информация оценена.

One Solution collect form web for “Пропустить первую строку (или больше) в CSV-файле, который используется для переименования файлов”

Попробуй это:

 tail -n +2 $spreadsheet | while IFS=, read -r -a arr; do mv "${arr[@]}"; done 

Команда tail выводит только последние строки файла. С помощью «-n +2» он печатает все последние строки файла, начиная со второго.

Подробнее о цикле while. Циклы while запускают команду mv пока доступны новые строки. Он делает это, используя условие цикла while:

 IFS=, read -r -a arr 

То, что указано выше, читается одной строкой в ​​массиве с именем arr , где разделитель полей (IFS) является запятой. Вероятно, опция -r не нужна.

Затем при запуске команды mv «$ {arr [@]}» преобразуется в список полей, где каждое поле разделяется двойными кавычками. В вашем случае имеется только два поля для каждой строки, поэтому он расширяется только до двух полей. «$ {Arr [@]}» – специальное соглашение, используемое bash для массивов, как описано в руководстве:

  Any element of an array may be referenced using ${name[subscript]}. The braces are required to avoid conflicts with pathname expansion. If subscript is @ or *, the word expands to all members of name. These subscripts differ only when the word appears within double quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS special variable, and ${name[@]} expands each element of name to a sepa- rate word. When there are no array members, ${name[@]} expands to nothing. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. This is analo- gous to the expansion of the special parameters * and @ (see Special Parameters above). ${#name[subscript]} expands to the length of ${name[subscript]}. If sub- script is * or @, the expansion is the number of elements in the array. Referenc- ing an array variable without a subscript is equivalent to referencing element zero. 
  • linux + как игнорировать (фильтровать) файл с пространством
  • Проверка скрипта выполняется
  • Скрипт, который распаковывает initrd, позволяет редактировать файл preseed.cfg, а пакеты его снова будут добавлены в cpio и gzip
  • Как заменить токены из одного файла данными из другого?
  • Как выполнить операцию «&» последовательно
  • Возможно ли иметь комментарии в многострочных командах в рыбе?
  • ожидать сценария для получения вывода для нескольких серверов
  • Как использовать awk для исправления и унификации поврежденного файла с несколькими столбцами и строками?
  • Как разобрать $ {! I} (и что это значит)?
  • Как разобрать таблицу для шаблона, если шаблон содержит пробелы
  • bash, который выделит максимальную область использования диска на выходе
  • Linux и Unix - лучшая ОС в мире.