1

我正在尝试使用 file1.csv 中的现有字符串对 file2.csv 中的字符串进行 grep,并将匹配的行写入 result.csv 文件。A 有以下 bash 脚本:

cat file1.csv | while read line; do
    grep $line ./file2.csv > result.csv
done

但毕竟 result.csv 总是空的。当我从 file2.csv 手动执行 grep 时,一切正常。我做错了什么?

文件 1.csv:

15098662745072
15098662745508

文件 2.csv:

";"0";"15098662745072";"4590";"4590";"
";"0";"15098662745508";"6400";"6400";"
";"0";"15098662745515";"6110";"6110";"
";"0";"15098662745812";"7970";"7970";"

预期结果(result.csv):

";"0";"15098662745072";"4590";"4590";"
";"0";"15098662745508";"6400";"6400";"
4

2 回答 2

4

>一直覆盖文件。用于>>附加到它。

-f您可以简单地使用in 选项从文件中grep读取grep模式,而不是使用循环。

grep -f file1.csv file2.csv > result.csv

如果必须使用循环,请使用以下方法:

while read line; do
    grep "$line" ./file2.csv
done < file1.csv > result.csv
于 2013-08-22T15:14:52.350 回答
1

您应该为此使用 awk,而不是 grep,因为:

a) grep 默认不查找字符串,它查找正则表达式。您需要使用fgreporgrep -Fawk代替grep来搜索字符串。

b)您真的只想匹配 file1.csv 中的数字,当它们在 file2.csv 中显示为完整的特定字段时,而不是它们出现在行中的任何位置。

awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csv
于 2013-08-22T18:21:27.450 回答