linux - 如何使用 bash 脚本从 csv 文件读取特定整数?

标签 linux

我已经编写了一个 bash 脚本(如下)来将数据添加到 csv 文件,现在我想从此 csv 文件读取特定的整数。我该怎么做?

我使用了“cat”命令,但它打开了整个文件。但我不希望这样,我想打开,例如 ID 号为 1 的客户。

另一方面,如何更新 csv 文件中的文件。例如,客户名称在 csv 文件中保存为“John”。通过使用更新功能,我想将他的名字更改为“Mattew Moniz”。我该怎么做?

#!/bin/bash
#Final Project 

while :
do

clear

echo "          ITC 350-Open Source Software Project "
echo ""
echo " ==================================================="
echo "    Customer Account Banking System          "
echo " ==================================================="

echo -e "\e[31m1) Create a new customer account\e[0m"       #red
echo -e "\e[32m2) Update account data\e[0m"                 #green
echo -e "\e[33m3) View and manage transaction\e[0m"         #orange
echo -e "\e[34m4) Check customers account details\e[0m"     #blue
echo "5) Delete customer's account"
echo -e "\e[36m6) Exit\e[0m"                                #gray
echo ""
echo ""
echo -e "\e[32mPlease choose an option:\e[1m"               #ligh green 
read usr_cmd

clear

case $usr_cmd in 

1) echo "Enter customer name: "
read cus_name
while ! [[ $cus_name =~ ^-?[[:alpha:]]+$ || $cus_name =~ " " ]]; do
    echo "Please enter a valid name"
    read cus_name
done


echo "Enter customer DOB: "
read cus_dob


echo "Enter customer national ID number: "
read cus_national_num

while ! [[ $cus_national_num =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer national ID number "
    read cus_national_num
done

echo "Enter customer email address: "
read cus_email

echo "Enter cutomer city: "
read cus_city

while ! [[ $cus_city =~ ^-?[[:alpha:]]+$ || $cus_city =~ " " ]]; do
    echo "Please enter a valid city"
    read cus_city
done

echo "Enter customer country : "
read cus_country

while ! [[ $cus_country =~ ^-?[[:alpha:]]+$ || $cus_country =~ " " ]]; do
    echo "Please enter a valid country "
    read cus_country
done


echo "Enter contact number: "
read cus_phone_num

while ! [[ $cus_phone_num =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer contact number "
    read cus_phone_num
done

echo "Enter type of the account (Saving/Current): "
read cus_account_type


echo "Enter first deposit amount : "
read cus_first_deposit 

while ! [[ $cus_first_deposit =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer first deposit amount "
    read cus_first_deposit
done

;;
# For this part I must write the code to generate a unique customer reg. number automatically
2) echo "Enter the customer registration number to update account data:  "
read cus_reg_num

echo "Enter customer name: "
read cus_name

while ! [[ $cus_name =~ ^-?[[:alpha:]]+$ || $cus_name =~ " " ]]; do
    echo "Please enter a valid name"
    read cus_name
done

echo "Enter customer DOB: "
read cus_dob

echo "Enter customer national ID number: "
read cus_national_num

while ! [[ $cus_national_num =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer national ID number "
    read cus_national_num
done

echo "Enter customer email address: "
read cus_email

echo "Enter customer city: "
read cus_city

while ! [[ $cus_city =~ ^-?[[:alpha:]]+$ || $cus_city =~ " " ]]; do
    echo "Please enter a valid city"
    read cus_city
done


echo "Enter customer country: "
read cus_country

while ! [[ $cus_country =~ ^-?[[:alpha:]]+$ || $cus_country =~ " " ]]; do
    echo "Please enter a valid country "
    read cus_country
done

echo "Enter customer contact number: "
read cus_phone_num

while ! [[ $cus_phone_num =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer contact number "
    read cus_phone_num
done


echo "Enter type of the account (Saving/Current): "
read cus_account_type

while ! [[ $cus_country =~ ^-?[[:alpha:]]+$ || $cus_country =~ " " ]]; do
    echo "Please enter a valid account type "
    read cus_country
done

echo "Enter first deposit amount: "
read cus_first_deposit

while ! [[ $cus_phone_num =~ ^-?[[:digit:]]+$ ]]; do
    echo "Please enter a valid customer first depsit amount: "
    read cus_phone_num
done


;;

#I must write the code to bring changes to the customer's money from csv file
3) echo "Which operation would you like to process with: "

echo "1) Deposit"
read cus_deposit_to_account

echo "2) Withdraw"
read cus_withdraw


;;

#I must write the code to get the data from FINAL_PROJECT.cvs file and display it
4) echo "Enter the customer's registration number to view details: "
read view_cus_reg_num


;;

#I must write the code to delete the customer from FINAL_PROJECT.csv
5) echo "Enter the customer's registration number to delete: "
read cus_reg_num

;;


6)break;;
*) echo "Invalid option";;
esac

echo "Press 6 to quit, anything else to continue: " 
read confirm_exit 
if [ $confirm_exit -eq 6 ]
then break
fi
done



echo "Customer Name", "Customer DOB", "Customer National ID Number", "Customer Email Address", "Customer City", "Customer Country", "Customer Contact Number", "Customer Account Type", "Customer First Deposit Amount" >> FINAL_PROJECT.csv

echo "$cus_name", "$cus_dob", "$cus_national_num", "$cus_email", "$cus_city", "$cus_country", "$cus_phone_num", "$cus_account_type", "$cus_first_deposit" >> FINAL_PROJECT.csv

#awk '!x[$1]++ && ! /^[[:blank:]]*$/' OSSGrades.csv

grep . FINAL_PROJECT.csv | awk '!a[$1]++' >> FINAL_PROJECT.csv

最佳答案

要在第三列中查找 id 1,您可以使用 grep:

grep '^\([^,]*, \)\{2\}1,' file.csv
  • ^ 匹配行首;
  • [^,] 匹配除逗号之外的任何字符;
  • * 表示零次或多次,因此 [^,]* 匹配零次或多次非逗号;
  • \(...\) 此处仅用于对“列”进行分组;
  • \{2\} 表示前一个元素(上面提到的组)必须重复两次,即 id 前面有两列。

请注意,这仅适用于简单的 CSV 文件。对于真实的,它可以包含引号或转义逗号,甚至单元格内的换行符,您需要真正的编程语言而不是 shell。

关于linux - 如何使用 bash 脚本从 csv 文件读取特定整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55826830/

相关文章:

使用别名运行的 Python

c++ - 编译 VNC 服务器二进制文件(适用于 Android)

python - Bash - 标准输出文本在重定向到文件时被截断

linux - 在 bash 脚本中读取变量的第一个字符?

linux - DBD-Oracle(1.74 或 1.76)在 win10 wsl ubuntu 上带有 oracle instantclient 11.2

java - 如何在 Linux 上为 eclipse 产品运行 consoleLog?

linux - 如何在 Linux 内核中分配大页面

c++ - 构建 jsoncpp (Linux) - 给我们凡人的指令?

c++ - 将文件的每一行作为命令行参数传递给二进制文件

ruby-on-rails - rails install - ERROR ... executing gem ... (OpenSSL::SSL::SSLError) SSL_connect ... read server hello A: 错误的版本号