【问题标题】:BASH Grep for Specific Email Address in CSVCSV 中特定电子邮件地址的 BASH Grep
【发布时间】:2016-02-02 10:36:08
【问题描述】:

我正在尝试通过逐行读取第一个文件并查找第二个文件以进行匹配来比较两个 CSV 文件。使用Diff 不是一个可行的解决方案。当我对第二个文件进行 grep 时,我似乎遇到了将电子邮件地址存储为变量的问题。

#!/bin/bash

LANG=C
head -2 $1 | tail -1 | while read -r line; do
  line=$( echo $line | sed 's/\n//g' )
  echo $line
  cat $2 | cut -d',' -f1 | grep -iF "$line"
done

变量 $line 包含文件 $2 中确实存在的电子邮件地址,但我没有得到任何结果。

我做错了什么?

文件1

Email
email@verizon.net
email@gmail.com
email@yahoo.com

文件2

email,,,,
email@verizon.net,,,,
email@gmail.com,,,,
email@yahoo.com,,,,

【问题讨论】:

  • 你能发布你的整个实现吗?
  • 好的。更新了帖子。这个版本只读取第一个文件的第二行,因为我知道它是匹配的。
  • 可能一个简单的awk 比管道一些东西更好!看到类似的东西:Remove duplicates from text file based on second text file
  • 好吧,我可以做grep -iF "$line" $2 但这也行不通。因此,cut 和 cat 语句仅用于删除变量行为。
  • 也许可以试试这个:#!/bin/bash cmp -s filename_1 filename_2 > /dev/null if [ $? -eq 1];那么 echo 不同 else echo 不一样 fi

标签: bash email csv variables grep


【解决方案1】:

给定:

# csv_0.csv
email
me@me.com
you@me.com
fee@me.com

# csv_1.csv
email,foo,bar,baz,bim
bee@me.com,3,2,3,4
me@me.com,4,1,1,32
you@me.com,7,4,6,6
gee@me.com,1,2,2,6
me@me.com,5,7,2,34
you@me.com,22,3,2,33

我跑了

$ pattern=$(head -2 csv_0.csv | tail -1 | sed s/,.*//g)
$ grep $pattern csv_1.csv
me@me.com,4,1,1,32
me@me.com,5,7,2,34

csv_0.csv中的每行行执行此操作

#!/bin/bash

LANG=C
filename="$1"
{
  read # don't read csv headers
  while read line
  do
      pattern=$(echo $line | sed s/,.*//g)
      grep $pattern $2
  done
} <"$filename"

然后

$ ./csv_read.sh csv_2.csv csv_3.csv
me@me.com,4,1,1,32
me@me.com,5,7,2,34
you@me.com,7,4,6,6
you@me.com,22,3,2,33

【讨论】:

  • 嗯...它似乎不断吐出@yahoo.com 电子邮件地址,但没有吐出确切的电子邮件地址匹配...
  • 我没有这个错误的上下文。以上在我的机器上完美运行。我不知道你的具体错误是什么。
  • 让我更清楚。我非常愿意提供帮助,但是您提到了我无法知道的问题的具体细节(@yahoo.com 地址?)。我为您提供的是对您提出的基本问题的一般性、正确的路径演示。我认为它符合答案的标准。如果您需要进一步的帮助,请详细说明您的要求。如果我的回答符合回复标准,请接受该回答。
  • 其实我很抱歉。它不只是打印 yahoo.com 的电子邮件;除了空行之外,它不匹配任何电子邮件。当它遇到一个空行时,它匹配文件 2 的每一行。所以基本上它不会打印任何匹配项。
  • @user3204352 听起来这在聊天中处理得更好:chat.stackoverflow.com/rooms/94018/…
猜你喜欢
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2019-09-10
  • 2023-03-26
相关资源
最近更新 更多