Чтение CSV-файла в Bash

Полная форма CSV — значение, разделенное запятыми. Файл CSV используется кодировщиком для многих целей, которые хранят данные в табличном формате полуструктур. Каждая строка файла обрабатывается как строка таблицы, и каждое поле строки отделяется запятой (,) в файле CSV. В Bash существует множество способов чтения файлов CSV, которые объясняются в этом руководстве.

Предпосылки:

Вы должны создать файл CSV, прежде чем практиковать пример этого руководства. Создайте файл CSV с именем «customers.csv» со следующим содержимым, чтобы проверить выходные данные сценария, используемого в этой статье. В этом файле 3 поля 4 строки и 6-й строки пусты.

ID, имя, электронная почта, адрес, мобильный

101, Andrey Master, Andrey@yandex.ru, 9/A Krasnaya, +89621762341425

102, Alex Murphy, Alex@yandex.ru, 120 Mira, +89621988675345

103, Dimon Avackov,,33/2 Ochakovo, +89621754532312

104, Anna Dimidova, Anna@yandex.ru, 10 Severnaya, +89621512875634

105, Anton Pupkov,, 2/B Krasnaya, +89621700453423

 

Различные способы чтения файла CSV в Bash

Файл CSV можно анализировать различными способами с помощью сценария Bash. В этой части статьи показаны различные способы чтения файла «customers.csv».

Пример 1. Чтение исходного содержимого CSV-файла

Создайте файл Bash со следующим скриптом, который считывает полное содержимое файла «customers.csv» с помощью цикла while:

#!/bin/bash

# установить filename

filename="customers.csv"

#Считывайте каждую строку файла на каждой итерации

while read data

do

#Распечатать линию

echo $data

done < $filename

После выполнения скрипта появляется следующий вывод:

andreyex@userhost:$ bash readcsv1.bash

ID, имя, электронная почта, адрес, мобильный

101, Andrey Master, Andrey@yandex.ru , 9/A Krasnaya, +89621762341425

102, Alex Murphy, Alex@yandex.ru , 

120 Mira, +89621988675345 

103, Dimon Avackov, ,33/2 Ochakovo, +89621754532312 

104, Anna Dimidova , Anna@yandex.ru , 10 Severnaya, +89621512875634 

105, Anton Pupkov, 2/B Krasnaya, +89621700453423 

andreyex@userhost:-$

 

Пример 2. Чтение CSV-файла с использованием заглавных букв в заголовке

Первая строка файла «customers.csv» содержит заголовок файла. Создайте файл Bash со следующим сценарием, который печатает содержимое файла «customers.csv» после заглавной буквы в первой строке файла. Команда awk используется в скрипте для печати содержимого файла после написания заголовка с заглавной буквы. Запятая (,) назначается в значениях FS и OFS в сценарии для чтения файла «customers.csv» и записи файла «updatedcustomers.csv». Команда cat используется для печати содержимого обоих файлов.

printf "Оригинал файла:n"

#Распечатайте исходное содержимое CSV-файла

cat cstomers.csv

#Создайте новый CSV-файл после ввода заголовка с заглавной буквы

awk 'BEGIN{FS=",";OFS=","}

{

if(NR==1)

print toupper($0)

else

print

}' customers.csv > updatedcustomers.csv

printf "nModified File:n"

#Распечатайте новый CSV-файл

cat updatedcustomers.csv

После выполнения скрипта появляется следующий вывод:

andreyex@userhost:-$ bash readcsv2.bash

Оригинальный файл:

ID, имя, электронная почта, адрес, мобильный

101, Andrey Master, Andrey@yandex.ru , 9/A Krasnaya, +89621762341425

102, Alex Murphy, Alex@yandex.ru , 120 Mira, +89621988675345 103, Dimon Avackov, ,33/2 Ochakovo, +89621754532312

104, Anna Dimidova , Anna@yandex.ru , 10 Severnaya, +89621512875634 105, Anton Pupkov, , 2/B Krasnaya, +89621700453423

Modified File:

ID, NAME, EMAIL, ADDRESS, MOBILE

101, Andrey Master, Andrey@yandex.ru , 9/A Krasnaya, +89621762341425 102, Alex Murphy, Alex@yandex.ru , 120 Mira, +89621988675345

103, Dimon Avackov, ,33/2 Ochakovo, +89621754532312

104, Anna Dimidova , f Anna@yandex.ru , 10 Severnaya, +89621512875634 105, Anton Pupkov, , 2/B Krasnaya, +89621700453423 andreyex@userhost:-$

 

Пример 3. Замените пустое поле CSV-файла на «No».

Создайте файл Bash со следующим сценарием, который печатает содержимое файла «customers.csv» после изменения пустого поля со значением «No». В этом файле пусты два поля, о которых говорится ниже. Команда «awk» используется в сценарии для печати содержимого файла после изменения пустых полей. Запятая (,) назначается в значениях FS и OFS в сценарии для чтения файла «customers.csv» и записи файла «updatedcustomers.csv». Команда «cat» используется для печати содержимого обоих файлов в табличном формате.

printf "Оригинал файла:n"

#Распечатайте исходное содержимое CSV-файла в табличной форме

cat customers.csv | column -s, -t

awk 'BEGIN{FS=",";OFS=","}

{

for(field=1;field<=NF;field++)

{

if($field == "") $field="None"

}

print

}' customers.csv > modifiedcustomers2.csv

printf "nИзмененный файл:n"

#Распечатайте новый CSV-файл в табличной форме

cat modifiedcustomers2.csv | column -s, -t

После выполнения скрипта появляется следующий вывод:

andreyex@userhost: -$ bash readcsv3.bash

Оригинальный файл:

ID

Name

101 Andrey Master

102 Alex Murphy

Email

Andrey@yandex.ru Alex@yandex.ru

Address

9/A Krasnaya

120 Mira

Mobile +89621762341425 +89621988675345

103 Dimon Avackov 104 Anna Dimidova 105 Anton Pupkov

33/2 Ochakovo

Anna@yandex.ru 10 Severnaya

2/B Krasnaya

+89621754532312

+89621512875634

+89621700453423

Modified File:

ID Name 

101 Andrey Master 

102 Alex Murphy

104 Anna Dimidova 

105 Anton Pupkov

Email

103 Dimon Avackov None

Andrey@yandex.ru Alex@yandex.ru

Anna@yandex.ru None

Address

9/A Krasnaya

120 Mira

33/2 Ochakovo

10 Severnaya

2/B Krasnaya

Mobile

+89621762341425 +89621988675345 +89621754532312 +89621512875634 +89621700453423

andreyex@userhost: -$

Пример 4. Распечатайте общее количество строк и столбцов CSV-файла

Создайте файл Bash со следующим сценарием, который подсчитывает общее количество строк и столбцов в файле «customers.csv». Переменная NR используется для печати общего количества строк файла. Переменная NF используется для печати общего количества полей файла.

printf "Оригинал файла:n"

#Распечатайте исходное содержимое CSV-файла

cat customers.csv

echo

echo -n "Общее количество строк:"

awk -F, 'END{print NR}' customers.csv

echo -n "Общее количество столбцов:"

awk -F, 'END{print NF}' customers.csv

Следующий вывод появляется после выполнения скрипта. Всего строк в файле 6, а всего полей файла 5, которые выводятся на выходе:

andreyex@userhost:-$ bash readcsv4.bash

Оригинальный файл:

ID, имя, электронная почта, адрес, мобильный

101, Andrey Master, Andrey@yandex.ru , 9/A Krasnaya, +89621762341425

102, Alex Murphy, Alex@yandex.ru , 120 Mira, +89621988675345

103, Dimon Avackov,33/2 Ochakovo, +89621754532312

104, Anna Dimidova, Anna@yandex.ru , 10 Severnaya, +89621512875634 

105, Anton Pupkov,, 2/B Krasnaya, +89621700453423

Общее количество строк:6

Общее количество столбцов:5

andreyex@userhost:-$

Заключение

В этой статье показаны методы чтения CSV-файла, изменения CSV-файла и подсчета строк и столбцов CSV-файла с помощью сценария Bash.

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *