我试图使用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
15098662745508file2.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";"发布于 2013-08-22 15:14:52
>一直覆盖文件。使用>>来附加到它。
不必使用循环,只需在grep中使用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-22 18:21:27
您应该为此使用awk,而不是grep,因为:
( a) grep在默认情况下不查找字符串,而是查找正则表达式。您需要使用fgrep、grep -F或awk而不是grep来搜索字符串。
( b)您实际上只希望在file2.csv中显示为完整特定字段时匹配file1.csv中的数字,而不是它们出现在行的任何位置。
awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csvhttps://stackoverflow.com/questions/18384375
复制相似问题