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

时间:2015-11-02 14:01:47

标签: bash email csv variables grep

我试图通过逐行读取并点击第二个文件进行匹配来比较两个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中存在的电子邮件地址,但我没有得到任何结果。

我做错了什么?

File1中

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

文件2

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

1 个答案:

答案 0 :(得分:0)

假设:

# 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