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, +8801700453423Bashで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ファイルの行と列をカウントする方法が示されています。



