我试图通过逐行读取并点击第二个文件进行匹配来比较两个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,,,,
答案 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