Shell 如何从另一个文件中查找包含任何字符串的行?

Shell 如何从另一个文件中查找包含任何字符串的行?,shell,grep,intersect,Shell,Grep,Intersect,我有2个csv文件。文件A,包含多个列。文件B,有一列。 例如: 文件A: chr1 100000 100022 A C GeneX chr2 200000 200033 X GeneY chr3 300000 300055 G A GeneZ 文件B: GeneY GeneZ 我希望我的输出是: chr2 200000 200033 X GeneY chr3 300000 300055 G A GeneZ 我试过使用grep(崩溃)和其他工具。 我肯定有一个非常简单的答案,我就是看不到

我有2个csv文件。文件A,包含多个列。文件B,有一列。 例如:

文件A:

chr1 100000 100022 A C GeneX
chr2 200000 200033 X GeneY
chr3 300000 300055 G A GeneZ
文件B:

GeneY
GeneZ
我希望我的输出是:

chr2 200000 200033 X GeneY
chr3 300000 300055 G A GeneZ
我试过使用
grep
(崩溃)和其他工具。

我肯定有一个非常简单的答案,我就是看不到

使用
grep-f

grep -f FileB FileA

下面是如何使用
awk

awk 'FNR==NR {a[$0];next} {for (i in a) if (i~$1) print i}' FileA FileB
chr2 200000 200033 X GeneY
chr3 300000 300055 G A GeneZ
或者像这样:

awk 'FNR==NR {a[$0];next} ($NF in a)' FileB FileA
chr2 200000 200033 X GeneY
chr3 300000 300055 G A GeneZ

谢谢你,阿米特。不幸的是,当我尝试在大型数据集上运行此操作时,我收到了一条内存不足的错误消息。@ChrisDias-您可以在使用
export LC_ALL=C
设置区域设置后再试。来源-如果
grep
崩溃,您在哪个平台上?您正在处理的文件有多大?您说您在尝试
grep-f FileB FileA
时遇到了“内存不足”错误。在这种情况下,最好的办法可能是将
FileB
分割成足够小的部分,以便在不发生
grep
崩溃的情况下进行处理。这样做的明显缺点是,与原始的
FileA
相比,结果集中的行将出现顺序错误。如果
FileB
中的两个单词可以出现在一行中,那么您也可能以重复结尾。
sed
效果更好吗?Perl呢?如果
sed
grep
或Perl都不起作用,那么您可能会找到更好的方法来编码信息并编写自己的处理程序。但这是最后的手段,取决于许多问题中尚未描述的因素。谢谢。我没能让塞德去上班,真倒霉。请确定您正在使用的平台,以及两个文件的大小(两个文件的行数和字节大小都很有用)。文件A只是1500行中的一列。文件B是1.2M,有5800个。谢谢Jotne。我尝试了这个,但是得到了一个空输出。我有两个文件作为.csv和制表符分隔的.txt;两者都不起作用。@ChrisDias它可以很好地处理上面的数据。那么您的数据的格式就不同了。