Время прочтения: 3 мин.

В этой статье я продемонстрирую возможности Windows PowerShell для работы с файлами в формате csv.

PowerShell – инструмент для автоматизации задач от Microsoft, представляющий из себя командную оболочку с языком сценариев. PowerShell работает с классами. Net, это отличает его от большинства других командных оболочек, принимающих и возвращающих текст.

PowerShell позволяет решать многие административные задачи, такие как настройка ОС, установка и настройка ПО, управление серверами и др.  Далее будут продемонстрированы возможности Powershell при работе с файловой системой, архивами, и файлами csv.

Для примера, я сгенерировала архив с однородными csv-файлами. Каждый файл содержит 2 столбца – имя клиента (вымышленное) и количество кредитов у этого клиента. Перейдем в директорию с архивом (команда cd) и распакуем его в папку «csv_files»:

Expand-Archive -LiteralPath '.\csv_files.zip' -DestinationPath .\csv_files

Так как все файлы имеют одинаковую структуру, будет удобно объединить их в один файл, и работать только с ним. Для этого перейдем в директорию «csv_files» (команда cd .\csv_files\) и создадим папку «combined»:

New-Item -Path '.\combined' -ItemType Directory

Объединим csv-файлы в единый файл «combined.csv»:

Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv .\combined\combined.csv -NoTypeInformation –Append

Команда выглядит немного устрашающе. К ней я приведу пояснения:

  1. Командлет Get-ChildItem получает все элементы из текущего местоположения, параметр -Filter *.csv позволяет отбирать файлы с расширением csv.
  2. Командлет Select-Object с параметром –ExpandProperty получает свойства объектов. В нашем случае мы получаем свойство FullName всех элементов csv в папке «csv_files».
  3. Командлет Import-Csv импортирует строки из csv-файлов в объекты похожие на таблицы. Следом Export-Csv добавляет эти объекты в «combined.csv».

Отлично, мы объединили все csv в один файл! Теперь поподробнее изучим его. Проверим количество строк в итоговом файле:

Get-Content combined.csv | Measure-object -Line

Теперь выведем первые 10 строк:

type combined.csv -Head 10

Посчитаем среднее, сумму, максимум, минимум от столбца «credits_count»:

Import-Csv combined.csv -Delimiter "," | Measure-Object -Property credits_count -Sum -Maximum -Minimum -Average

Да, существуют более мощные инструменты для работы с данными, и я не призываю вас от них отказываться. PowerShell является встроенным средством и окажет вам помощь, если вы не хотите использовать сторонние инструменты.