我有两个csv文件
FILEA
ORDER BY CASE WHEN (above case) = '' THEN 1 ELSE 0 END
FILEB
ID
1
2
3
我想要做的是获取FileA中的每个值并比较FileB中的ID是否等于FileA中的ID,如果匹配,则在FiLeB中打印整行并将所有内容保存在FileC中。请注意,FileC中的顺序并不重要
预期结果
FileC
name,ID
a,1
a,2
a,4
ab,1
ac,1
bb,3
bd,2
ad,2
我目前粗略的想法:
name,ID
a,1
a,2
ab,1
ac,1
bb,3
bd,2
ad,2
但是FileA和FileB都相当大,我不确定在这里使用for循环是否是一个好主意,因为它会耗费大量时间。我们还有其他方法可以解决这个问题吗?谢谢
答案 0 :(得分:1)
使用awk
:
awk -F ',' 'NR==FNR { a[$1]=$1; next}; $2 in a {print $0};' FileA FileB
对于匹配字段4,您可以将$ 2更改为$ 4。
使用grep
时,您不应使用grep -f FileA FileB
,而是
grep -f <(sed 's/.*/,&$/' FileA) FileB
第二个grep确保您将跳过dontwantthis,123456789
行。
当您想要添加更多条件(第三个字段,......)时,sed命令很快就会失控。