如果我在 file1.csv 中有以下内容(空格分隔):
RED 4 VWX
BLUE 2 MNO
BLUE 7 DEF
PURPLE 6 JKL
BLACK 8 VWX
BROWN 1 MNO
RED 1 GHI
RED 7 ABC
以及 file2.csv 中的以下内容(逗号分隔):
BROWN,2
RED,5
YELLOW,8
有没有办法使用 file2.csv 在 file1.csv 中搜索匹配行?目前,如果我想使用 file2.csv 中的第 1 行术语来搜索 file1.csv,我必须手动输入以下内容:
grep "BROWN" file1.csv | grep "2"
我想自动执行此搜索以在 file1.csv
中查找与 file2.csv
中给定行中的两个项目匹配的行。我已经尝试了一些 awk 命令,但是我很难在 grep 中使用 awk 输出作为参数。我通过标准的 Mac 终端运行所有这些(所以我想我正在使用 bash?)非常感谢任何帮助。谢谢!
最佳答案
awk 一行
awk 'FNR==NR{a[$1]=$2; next} ($1 in a) && a[$1]==$2' FS=, file2.csv FS=" " file1.csv
FNR==NR{a[$1]=$2; next}
:要读取第一个输入文件,这里是 file2.csv
并创建一个关联数组 a
,其中键作为 file2.csv< 中的第 1 列
和值作为 项目编号
。
($1 in a) && a[$1]==$2
:在迭代第二个输入文件时,即 file1.csv
,检查第 1 列值是否作为键存在在数组 a
中。如果存在,检查 item number
是否匹配。如果匹配,结果将为 1
并打印行。
或者
只需使用 grep
grep -wf <(tr "," " " <file2) file1
在这里,我们使用 tr
将 file2 中的 ,
替换为空格 并使用 file2 中的每一行作为在
file1 中搜索的模式
使用我们可爱的 grep
-f
选项
-w
是匹配字边界,这样ABC 1
就不会匹配ABC 123
关于linux - Grep csv 与来自另一个 csv 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960837/