我正在尝试使用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";"
答案 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默认不查找字符串,它查找正则表达式。您需要使用fgrep
或grep -F
或awk
代替grep
来搜索字符串。
b)你真的只想匹配file1.csv中的数字,当它们在file2.csv中显示为完整的特定字段时,而不是它们出现在该行的任何地方。
awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csv