如果我在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
以下文件2.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命令,但是很难在awp中使用awk输出作为参数。我通过一个标准的Mac终端运行所有这些(所以我想我正在使用bash?)非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
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列,值为item number
。
($1 in a) && a[$1]==$2
:在迭代第二个输入文件,file1.csv
时,检查第1列值是否作为数组a
中的键存在。如果存在,请检查item number
是否匹配。如果匹配,则结果为1
,并且将打印行。
或
只需使用 grep
即可grep -wf <(tr "," " " <file2) file1
我们正在使用,
替换file2中的空格
tr
,并使用file1
中-f
中的每一行作为模式进行搜索由我们可爱的grep
-w
与字词边界匹配,因此ABC 1
与ABC 123
不匹配
答案 1 :(得分:0)
您可以使用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
时,第三行将字段分隔符更改为空格,最后一行匹配前两个字段是数组中键的任何行。