grep from file不会将结果写入输出文件

时间:2013-08-22 15:11:20

标签: bash grep

我正在尝试使用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时一切正常。我做错了什么?

file1.csv:

15098662745072
15098662745508

file2.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";"

2 个答案:

答案 0 :(得分:4)

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

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

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

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

while read line; do
    grep "$line" ./file2.csv
done < file1.csv > result.csv

答案 1 :(得分:1)

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

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

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

awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csv