ウェブサイト検索

BashでCSVファイルを読み込む


CSVの完全な形式はカンマ区切り値です。CSVファイルは、コーダーがさまざまな目的で使用し、データを半構造化された表形式で保存します。ファイルの各行はテーブルの行として扱われ、行の各フィールドはCSVファイルでカンマ(,)で区切られています。BashにはCSVファイルを読み取る方法が多くあり、このチュートリアルで説明されています。

前提条件:

このチュートリアルの例を練習する前にCSVファイルを作成する必要があります。「customers.csv」という名前のCSVファイルを作成し、次の内容を入力して、このチュートリアルで使用されるスクリプトの出力を確認してください。このファイルでは、4行目と6行目の3番目のフィールドが空です。

ID, Name, Email, Address, Mobile

101, Jafar Iqbal, jafar@gmail.com, 9/A Dhanmondi Dhaka, +8801762341425

102, Kamal Hossain, kamal@gmail.com, 120 Mirpur Dhaka, +8801988675345

103, Nirob Chowdhury,,33/2 Jigatola Dhaka, +8801754532312

104, Farheen Hasan , farheen@gmail.com<a href="blank">,</a> 10 Kadhalbagun Dhaka, +8801512875634

105, Md. Rahim,, 2/B Dhanmondi Dhaka, +8801700453423

BashでCSVファイルを読む方法の異なる種類

CSVファイルはBashスクリプトを使用して異なる方法で解析できます。このチュートリアルのこの部分では、「customers.csv」ファイルを読むための異なる方法が示されています。

例 1: CSVファイルの元の内容を読む

以下のスクリプトを使用して「customers.csv」ファイルの全内容を読み取るBashファイルを作成します。whileループを使用してください:

#!/bin/bash

#Set the filename

filename="customers.csv"

#Read each line of the file in each iteration

while read data

do

#Print the line

echo $data

done < $filename

スクリプトを実行した後に次の出力が表示されます:

例2: ヘッダーを大文字にしてCSVファイルを読み込む

「customers.csv」ファイルの最初の行には、ファイルの見出しが含まれています。ファイルの最初の行を大文字にした後、「customers.csv」ファイルの内容を印刷する以下のスクリプトを持つBashファイルを作成します。このスクリプトでは「awk」コマンドを使用して、ヘッダーを大文字にした後にファイルの内容を印刷します。スクリプト内では、コンマ(,)がFSおよびOFSの値に割り当てられ、「customers.csv」ファイルを読み込み、「updatedcustomers.csv」ファイルに書き込みます。「cat」コマンドは、両方のファイルの内容を印刷するために使用されます。

printf "Original File:\n"

#Print the original content of the CSV file

cat cstomers.csv

#Create a new CSV file after capitalizing the header

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

{

if(NR==1)

print toupper($0)

else

print

}' customers.csv > updatedcustomers.csv

printf "\nModified File:\n"

#Print the new CSV file

cat updatedcustomers.csv

スクリプトを実行した後に次の出力が表示されます:

例3:CSVファイルの空欄を「なし」に置き換える

次のスクリプトを含むBashファイルを作成してください。このスクリプトは、「customers.csv」ファイルの内容を表示しますが、空のフィールドを「None」値に変更します。このファイルには、以下に示すように2つの空のフィールドがあります。スクリプトでは「awk」コマンドを使用して、空のフィールドを修正した後のファイルの内容を表示します。カンマ(,)は、スクリプトでFSおよびOFS値に設定されており、「customers.csv」ファイルを読み取り、「updatedcustomers.csv」ファイルを書き込むために使用されます。「cat」コマンドは、両方のファイルの内容を表形式で表示するために使用されます。

printf "Original File:\n"

#Print the original content of the CSV file in tabular form

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 "\nModified File:\n"

#Print the new CSV file in tabular form

cat modifiedcustomers2.csv | column -s, -t

スクリプトを実行した後に次の出力が表示されます:

例4:CSVファイルの行数と列数の合計を印刷する

以下のスクリプトを使用して、“customers.csv”ファイルの総行数と列数をカウントするBashファイルを作成します。NR変数はファイルの総行数を出力するために使用され、NF変数はファイルの総フィールド数を出力するために使用されます。

printf "Original File:\n"

#Print the original content of the CSV file

cat customers.csv

echo

echo -n "Total rows:"

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

echo -n "Total columns:"

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

スクリプトを実行した後に以下の出力が表示されます。ファイルの総行数は6で、ファイルの総フィールド数は5で、これは出力に印刷されます:

結論

このチュートリアルでは、Bashスクリプトを使用してCSVファイルを読み込み、CSVファイルを修正し、CSVファイルの行と列をカウントする方法が示されています。