Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSV中特定电子邮件地址的BASH Grep_Bash_Email_Csv_Variables_Grep - Fatal编程技术网

CSV中特定电子邮件地址的BASH Grep

CSV中特定电子邮件地址的BASH Grep,bash,email,csv,variables,grep,Bash,Email,Csv,Variables,Grep,我试图通过逐行读取第一个CSV文件并对第二个文件进行灰显来比较两个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"

我试图通过逐行读取第一个CSV文件并对第二个文件进行灰显来比较两个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

文件2

鉴于:

我跑

$ 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\u 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"

你能发布你的整个实现吗?好的。更新了帖子。这个版本只读取了第一个文件的第二行,因为我知道它是匹配的。可能一个简单的
awk
比管道传输一些东西更好!看到类似的东西:我可以做
grep-iF“$line”$2
,但那也不行。因此,cut和cat语句只是用于删除变量行为。或许可以尝试以下方法:#/bin/bash cmp-s filename_1 filename_2>/dev/null if[$?-eq 1];那回声就不一样了,不然回声就不一样了。。。它似乎一次又一次地吐出@yahoo.com电子邮件地址,但没有吐出与之匹配的确切电子邮件地址…我没有这个错误的上下文。以上操作在我的机器上非常有效。我不知道你的具体错误是什么。让我更清楚一点。我非常愿意提供帮助,但是你提到了关于你的问题的细节,我无法知道(@yahoo.com地址?)。我提供给你们的是一个关于你们所问的基本问题的一般性的、正确的路径演示。我认为它符合回答的标准。如果您需要进一步的帮助,请详细说明您的要求。如果我的回答符合回答的标准,请接受回答。事实上,我道歉。它不仅仅是打印雅虎的电子邮件;除了空行,它不匹配任何电子邮件。当它遇到空行时,它将匹配文件2的每一行。所以基本上它不会打印任何匹配项。@user3204352听起来在聊天中处理得更好:
# 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
#!/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