Shell grep使用文件内容查找缺少的内容
我正在尝试查找在其他文件集合的任何行中都不显示的文件行 我将以下代码放在一起,但它似乎只适用于Shell grep使用文件内容查找缺少的内容,shell,csv,grep,Shell,Csv,Grep,我正在尝试查找在其他文件集合的任何行中都不显示的文件行 我将以下代码放在一起,但它似乎只适用于names.csv中的最后一行 missing.csv Fred Jack Ian Louis names.csv是一个没有标题的单列文件,如下所示: Fred Jack Ian Louis Ash 记录/**.csv文件是800mb以上的记录文件,包含许多列。名称列值用双引号括起来表示其值 name,email,etc.. "Fred",fred@fred.com... "Ash",ash@ash
names.csv中的最后一行
missing.csv
Fred
Jack
Ian
Louis
names.csv是一个没有标题的单列文件,如下所示:
Fred
Jack
Ian
Louis
Ash
记录/**.csv文件是800mb以上的记录文件,包含许多列。名称列值用双引号括起来表示其值
name,email,etc..
"Fred",fred@fred.com...
"Ash",ash@ash.com...
"Jack",jack@jack.com...
我的链接命令:
grep-whof names.csv记录/*.csv | grep-vFf/dev/stdin names.csv>missing.csv
missing.csv
Fred
Jack
Ian
Louis
这会发现Ash
在其中一个文件中,而我最终发现所有其他文件仍然丢失
如何正确使用文件内容进行grep?如果我理解正确,您看到的名称不属于记录/*.csv
,但列在名称.csv
中
如果是这样,您可以使用此awk
脚本:
awk 'NR==FNR{a[$1];next}{b[$2]}END{for(i in a)if(!(i in b)) print i}' names.csv FS='"' records/*.csv
第一个块语句NR==FNR{a[$1];next}
用names.csv
的内容填充数组a
下一个块{b[$2]}
用文件名记录/*.csv
填充数组b
最后一个block语句正在a
中查找b
中没有的名称,并将其打印出来。尝试以下操作:
使用GNUcut
(Linux):
带BSDcut
(BSD、OSX)
您能否创建一个显示问题并用于测试目的的最小示例?您已经显示了names.csv
,创建了两个小样本文件,比如foo.csv
和baz.csv
,每个文件只有几行,另外一个样本是topxyz.csv
,然后显示这些样本的完整预期输出。我对-k2
参数有问题(剪切:非法选项--k)可能是因为我使用的是OSX而不是Linux,所以切换到-f2
,因此命令看起来像cut-f2-d''records/*.csv | sort-u | grep-vf/dev/stdinnames.csv
它工作得很好,达到了预期的效果!谢谢!=d
cut -f2 -d '"' records/*.csv | sort -u |
grep -vf /dev/stdin names.csv