Shell csv文件中的重复行
我有一个从csv文件中删除联系人的脚本 Csv文件类似于:名字、姓氏、电话号码 示例:约翰,多伊,2109428409 脚本要求用户输入姓氏,整行内容被删除。如果csv文件中存在重复的姓氏,我如何询问要删除的两个联系人之一的用户名? 这是我的密码Shell csv文件中的重复行,shell,csv,sh,Shell,Csv,Sh,我有一个从csv文件中删除联系人的脚本 Csv文件类似于:名字、姓氏、电话号码 示例:约翰,多伊,2109428409 脚本要求用户输入姓氏,整行内容被删除。如果csv文件中存在重复的姓氏,我如何询问要删除的两个联系人之一的用户名? 这是我的密码 #!/bin/bash echo "Tell Me The Contact's Last Name you want to delete" read LastName if grep -q $LastName contacts.csv
#!/bin/bash
echo "Tell Me The Contact's Last Name you want to delete"
read LastName
if grep -q $LastName contacts.csv
then
sed -i '/'$LastName'/d' contacts.csv
else
echo "The surname you typed doesn't exist or isn't valid"
fi
我们可以在您的脚本中添加如下内容
#!/bin/bash
echo "Tell Me The Contact's Last Name you want to delete"
read LastName
# --------------------------------------------------------#
if [ $(grep $LastName contacts.csv | wc -l) -gt 1 ];then # --> check the count of Last name in file
echo "enter the first name from below list of contact you want to remove"
grep $LastName contacts.csv # --> Display list of entries with same Last Name
read firstName # --> Read First name Input from user
sed -i '/'$firstName,$LastName'/d' contacts.csv # --> delete row with first name and Last Name.
elif [ $(grep $LastName contacts.csv | wc -l) -eq 1 ];then
# --------------------------------------------------------#
sed -i '/'$LastName'/d' contacts.csv
else
echo "The surname you typed doesn't exist or isn't valid"
fi
我们可以在您的脚本中添加如下内容
#!/bin/bash
echo "Tell Me The Contact's Last Name you want to delete"
read LastName
# --------------------------------------------------------#
if [ $(grep $LastName contacts.csv | wc -l) -gt 1 ];then # --> check the count of Last name in file
echo "enter the first name from below list of contact you want to remove"
grep $LastName contacts.csv # --> Display list of entries with same Last Name
read firstName # --> Read First name Input from user
sed -i '/'$firstName,$LastName'/d' contacts.csv # --> delete row with first name and Last Name.
elif [ $(grep $LastName contacts.csv | wc -l) -eq 1 ];then
# --------------------------------------------------------#
sed -i '/'$LastName'/d' contacts.csv
else
echo "The surname you typed doesn't exist or isn't valid"
fi
你是否尝试过使用同样的方法?如果这只是为了学习,那么好,但是如果你有真正的数据,你想删除重复,请考虑<代码>排序-U-O DATFATE DATABORION/COD>。祝你好运。我实际上是在用同样的方法尝试,并没有真正得到我想要的结果。是的,这只是学习。@代码>代码> GRP-C/<代码>输出匹配的行数,所以不是测试我们是否有匹配,而是要求匹配的数量,并考虑3种情况:0个匹配,1个匹配,不止一个匹配。但是,您的脚本还有其他问题:(1)您正在测试$LastName是否出现在CSV文件的任何位置,而不仅仅是在姓氏列中。(2) 恶意用户可以输入您认为的姓氏,这是一个regexp模式,它会清除您的整个CSV文件。总的来说,我个人不会在Posix shell中解决这个问题。您有CSV文件,这意味着您的数据在某种程度上是结构化的。这意味着您实际上只想在特定字段中查找
$LastName
的值,而不仅仅是行中的任何位置。这使得$LastName
的值,而不仅仅是行中的任何位置。这使得grep
不适合此任务。