小编典典

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

linux

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

#!/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"。我的工作有什么问题吗?


阅读 338

收藏
2020-06-02

共1个答案

小编典典

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}"

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

2020-06-02