У меня есть список файлов изображений, которые являются сканированиями получений. Они похожи на это:
gas_20160710_3432.jpg
gas_20160810_242.jpg
water_20161004_4510.jpg
Я хотел бы смочь взять список файлов и превратить его в файл CSV, который я могу сделать с командой 'ls' > files.csv
.
Однако я заботился, чтобы заставить имена файлов содержать немного информации о содержании, и я хотел бы проанализировать имена файлов, таким образом, я могу более легко работать с данными при редактировании файла CSV в LibreOffice Calc.
Каждое имя файла имеет тип получения, которое это, затем дата в формате YYYYMMDD и затем денежная сумма, которая записана на получении. Так, я хотел бы выделить ту информацию в различные столбцы, а также иметь один столбец с полным именем файла. Так, конечный результат должен быть похожим на это:
Существует также еще одна проблема. Дата должна быть преобразована от YYYYMMDD до YYYY-MM-DD. Без тире LibreOffice Calc, кажется, запутывается.
Существует ли способ создать файл CSV, который я хочу от содержания каталога из командной строки?
Обратите внимание, что нет никаких других файлов в каталоге кроме сканирований получения, таким образом, не должно быть никакой фильтрации типов файлов или, исключая файлы с по-другому отформатированными именами.
Используя жемчуг:
ls | perl -pe 's/(.)(.*)_(\d{4})(\d{2})(\d{2})_(\d+).jpg/\u$1$2,$3-$4-$5,$6,$&/'
В жемчуге, (...)
привык к совпавшему тексту группы, таким образом, (.)
группа с отдельным символом, (.*)
группа с произвольной строкой, (\d{2})
группа с двумя цифрами (\d
цифра, и {2}
указывает на два из предыдущих), и так далее. \u
преобразовывает следующий атом в верхний регистр. $1
, $2
... различные группы в порядке. $&
содержит весь подобранный текст.
Вывод:
Gas,2016-07-10,3432,gas_20160710_3432.jpg
Gas,2016-08-10,242,gas_20160810_242.jpg
Water,2016-10-04,4510,water_20161004_4510.jpg
Можно добавить заголовки независимо.