Shell 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

我有一个从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
  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
的值,而不仅仅是行中的任何位置。这使得 GRP不适合这个任务。你尝试过使用你已经使用过的相同方法吗?如果这只是为了学习,那么,但是如果你有真实的数据,你想删除重复,请考虑<代码>排序-U-O DATFATE DATABORION/COD>。祝你好运。我实际上是在用同样的方法尝试,并没有真正得到我想要的结果。是的,这只是学习。@代码>代码> GRP-C/<代码>输出匹配的行数,所以不是测试我们是否有匹配,而是要求匹配的数量,并考虑3种情况:0个匹配,1个匹配,不止一个匹配。但是,您的脚本还有其他问题:(1)您正在测试$LastName是否出现在CSV文件的任何位置,而不仅仅是在姓氏列中。(2) 恶意用户可以输入您认为的姓氏,这是一个regexp模式,它会清除您的整个CSV文件。总的来说,我个人不会在Posix shell中解决这个问题。您有CSV文件,这意味着您的数据在某种程度上是结构化的。这意味着您实际上只想在特定字段中查找
$LastName
的值,而不仅仅是行中的任何位置。这使得
grep
不适合此任务。