Linux Grep csv带有来自另一个csv的参数
如果file1.csv中有以下内容(空格分隔): 以及file2.csv(逗号分隔)中的以下内容: 有没有办法使用file2.csv搜索file1.csv中的匹配行?目前,如果我想使用file2.csv中的第1行术语搜索file1.csv,我必须手动输入以下内容:Linux Grep csv带有来自另一个csv的参数,linux,bash,csv,awk,grep,Linux,Bash,Csv,Awk,Grep,如果file1.csv中有以下内容(空格分隔): 以及file2.csv(逗号分隔)中的以下内容: 有没有办法使用file2.csv搜索file1.csv中的匹配行?目前,如果我想使用file2.csv中的第1行术语搜索file1.csv,我必须手动输入以下内容: grep "BROWN" file1.csv | grep "2" 我想自动执行此搜索,以在file1.csv中查找与file2.csv中给定行中的两个项目匹配的行。我尝试了一些awk命令,但在grep中很难使用awk输出作为参数。
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列,值作为项目编号
(a中的$1)和&a[$1]=$2
:在迭代第二个输入文件,即file1.csv
时,检查列1值是否作为数组a
中的键存在。如果存在,请检查项目编号是否匹配。如果匹配,结果将为1
,并将打印行
或
简单地使用grep
grep -wf <(tr "," " " <file2) file1
grep-wf您可以使用awk
进行匹配
awk 'BEGIN { FS=","; }
NR == FNR { a[$1,$2]++; next; }
FNR == 1 { FS=" "; }
($1,$2) in a' file2.csv file1.csv
第二行创建一个数组,其键是file2.csv
中的值。在处理file1.csv
时,第三行将字段分隔符改为空格,最后一行匹配前两个字段是数组中键的任何行。您不需要使用awk
输出作为grep
的参数。使用awk
进行匹配。您真的可以这样更改FS
?整洁的如果file2.csv包含a1
,而file1.csv包含a12
,grep方法将给出错误匹配。Barmar:谢谢您的第一条评论。第二,我使用-w
选项更新了grep解决方案。由于某些原因,在尝试每一行程序时,我没有得到任何输出。结果不应该打印在下面吗?@DanielEsporma:哈哈,是的,结果应该在这个命令下面。那很可爱:P你确定你的文件顺序正确吗。逗号分隔的一个将首先出现,然后另一个作为file1.csv。另外,您提供的输入没有匹配的记录。您可以使用FNR==1{FS=”“}
,这样您就不需要更改第二个文件的每一行的FS来跟进蝙蝠侠的评论,($1fs$2)在a
中,很抱歉这个可笑的nooby问题,但是我如何在终端中输入4行命令?我应该把它做成一个脚本并从那里运行吗?只需键入4行即可。shell知道由于未关闭的报价单,它没有完成。您还可以将awk
代码放入一个文件中,并使用awk-f filename file2.csv file1.csv
grep -wf <(tr "," " " <file2) file1
awk 'BEGIN { FS=","; }
NR == FNR { a[$1,$2]++; next; }
FNR == 1 { FS=" "; }
($1,$2) in a' file2.csv file1.csv