当前位置: 首页 > 面试题库 >

在另一个文件中查找一个文件的内容

臧正平
2023-03-14
问题内容

我正在使用以下外壳程序脚本将一个文件的内容查找到另一个文件中:

#!/bin/ksh
file="/home/nimish/contents.txt"

while read -r line; do
    grep $line /home/nimish/another_file.csv
done < "$file"

我正在执行脚本,但未显示CSV文件中的内容。我的contents.txt文件还包含CSV文件中的数字,例如"08915673""123223"。我的工作有什么问题吗?


问题答案:

grep本身能够做到。只需使用标志-f

grep -f <patterns> <file>

<patterns>是每行包含一个模式的文件;并且<file>是要在其中进行搜索的东西文件。

请注意grep,即使每行的内容看起来像一个正则表达式,也要强制将每行视为一个模式,您应该使用flag -F, --fixed-strings

grep -F -f <patterns> <file>

如您所说,如果文件是CSV,则可以执行以下操作:

grep -f <(tr ',' '\n' < data.csv) <file>

例如,考虑文件“ a.txt”,其中包含以下几行:

alpha
0891234
beta

现在,文件“ b.txt”包含以下行:

Alpha
0808080
0891234
bEtA

以下命令的输出是:

grep -f "a.txt" "b.txt"
0891234

您根本不需要在for这里循环;grep本身提供此功能。

现在使用您的文件名:

#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"

您可以更改','为文件中的分隔符。



 类似资料:
  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我试图找到一个目录中存在的文件,而不是另一个目录中的文件,我尝试使用以下命令: 与上面的命令,它会找到这两个文件的问题,但不是还有文件而不是在, 我试图在文件中找到文件,但不仅在其中。 这是我的数据的一小部分样本 在我脑海里的另一个问题是,我怎么能找到的文件,而不是在或在一个单一的命令?

  • 问题内容: 在一个文本文件中,我有150个字。我还有另一个文本文件,大约有100,000行。 如何检查属于第一个文件的每个单词是否在第二个文件中? 我曾考虑过使用,但找不到如何使用它来阅读原始文本中的每个单词。 有没有办法做到这一点?还是其他解决方案? 我尝试使用此shell脚本,但它几乎匹配每一行: 我发现的另一种方法是: 问题答案: 您可以使用: 否则匹配完整的单词: 更新: 根据评论:

  • 本文向大家介绍linux把一个文件的内容复制到另一个文件的末尾,包括了linux把一个文件的内容复制到另一个文件的末尾的使用技巧和注意事项,需要的朋友参考一下 问题描述: 比如11的文件内容是: hello 22的文件内容是: world 将22的文件内容复制到11文件的末尾,11文件的效果就是: hello world 解决办法: cat 22 >> 11 >>的意思是追加的意思 > 的意思是重

  • 我对python还很陌生,所以如果这是非常简单或非常错误的思考方式,请原谅我。 我安装了python 2.7。根据我在运行以下代码时的理解,它列出了查找模块的目录。 我有另一个目录,似乎有一堆我安装的 python 模块。“/Library/Python/2.7/site-packages” 我想我需要做两件事之一: (1) 指示python在这个附加文件夹中查找模块。我该怎么做? (2)将模块安

  • 问题内容: JavaScript中是否有类似于CSS的东西,允许您在另一个JavaScript文件中包含一个JavaScript文件? 问题答案: JavaScript的旧版本没有导入,包含或要求,因此已经开发了许多解决此问题的方法。 但是自2015年(ES6)起,JavaScript有了ES6模块标准即可在Node.js中导入模块,大多数现代浏览器也支持该模块。 为了与旧浏览器的兼容性,这样的构

  • 问题内容: 我遇到一个有趣的问题: file1.csv有几百行,例如: file2.csv大约有1100万行,例如: 我想做的是编写一个脚本,该脚本接受file1.csv中的每个DTime值,并在file2.csv的DateTime列中找到部分匹配的第一个实例,并输出DateTime,Bid,Ask询问该行。部分匹配位于前16个字符上。 这两个文件都是按照从最早到最新的顺序排序的,因此,如果fil