首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >grep from文件不会将结果写入输出文件

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

Stack Overflow用户
提问于 2013-08-22 15:11:20
回答 2查看 321关注 0票数 1

我试图使用file1.csv中现有的字符串从file2.csv中获取grep字符串,并将匹配行写入result.csv文件。A有以下bash脚本:

代码语言:javascript
复制
cat file1.csv | while read line; do
    grep $line ./file2.csv > result.csv
done

但毕竟result.csv始终是空的。当我从file2.csv手动执行grep时,一切都很好。我做错了什么?

file1.csv:

代码语言:javascript
复制
15098662745072
15098662745508

file2.csv:

代码语言:javascript
复制
";"0";"15098662745072";"4590";"4590";"
";"0";"15098662745508";"6400";"6400";"
";"0";"15098662745515";"6110";"6110";"
";"0";"15098662745812";"7970";"7970";"

预期结果(result.csv):

代码语言:javascript
复制
";"0";"15098662745072";"4590";"4590";"
";"0";"15098662745508";"6400";"6400";"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-22 15:14:52

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

不必使用循环,只需在grep中使用grep选项来使grep从文件中读取模式。

代码语言:javascript
复制
grep -f file1.csv file2.csv > result.csv

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

代码语言:javascript
复制
while read line; do
    grep "$line" ./file2.csv
done < file1.csv > result.csv
票数 4
EN

Stack Overflow用户

发布于 2013-08-22 18:21:27

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

( a) grep在默认情况下不查找字符串,而是查找正则表达式。您需要使用fgrepgrep -Fawk而不是grep来搜索字符串。

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

代码语言:javascript
复制
awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csv
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18384375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档