Linux 在另一个文件中查找一个文件的内容
我使用以下shell脚本将一个文件的内容查找到另一个文件中:Linux 在另一个文件中查找一个文件的内容,linux,shell,unix,awk,grep,Linux,Shell,Unix,Awk,Grep,我使用以下shell脚本将一个文件的内容查找到另一个文件中: #!/bin/ksh file="/home/nimish/contents.txt" while read -r line; do grep $line /home/nimish/another_file.csv done < "$file" #/bin/ksh file=“/home/nimish/contents.txt” 而read-r行;做 grep$line/home/nimish/other_file.
#!/bin/ksh
file="/home/nimish/contents.txt"
while read -r line; do
grep $line /home/nimish/another_file.csv
done < "$file"
#/bin/ksh
file=“/home/nimish/contents.txt”
而read-r行;做
grep$line/home/nimish/other_file.csv
完成<“$file”
我正在执行脚本,但它没有显示CSV文件中的内容。My contents.txt文件包含CSV文件中也存在的编号,如
“08915673”
或“123223”
。我所做的有什么不对吗?grep
本身就可以这样做。只需使用标志-f
:
grep -f <patterns> <file>
如您所说,如果您的文件是CSV,您可以执行以下操作:
grep -f <(tr ',' '\n' < data.csv) <file>
现在,文件“b.txt”包含以下行:
Alpha
0808080
0891234
bEtA
以下命令的输出为:
grep -f "a.txt" "b.txt"
0891234
您根本不需要为在这里循环grep
本身提供了此功能
现在使用您的文件名:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
#/bin/bash
patterns=“/home/nimish/contents.txt”
search=“/home/nimish/other_file.csv”
grep-f另一种解决方案:
- 使用
awk
并创建自己的hash
(例如ahash),所有这些都由您自己控制李>
- 将
$0替换为$i
,您可以匹配所需的任何字段
我不认为你真的需要一个脚本来完成你想做的事情
一个命令就够了。在我的例子中,我需要CSV文件第11列中的标识号(以“;”作为分隔符):
grep-f,因此使用grep-f时会出现错误“.rep:0652-033无法打开:”嗯,文件路径似乎有问题。您确定路径正确吗?尝试用双引号括起文件名。你想怎么执行。请在下一条注释中添加您试图运行的命令行。因此,我只是通过./script运行脚本。ksh@NIMISHDESHPANDE请试试我贴的剧本。谢谢鲁本。。。我尝试了你提到的上面的脚本,但它给了我错误“(不是预期的”考虑编辑你的问题,从每一个文件中包含2行,并给出这些输入的预期输出。好运。上面的脚本不使用<代码>文件>代码>变量,而不是记录那里的名称。请尝试<代码>读取-R行< $file;执行<代码> >。r
以了解它是否有效。此外,grep
将使用正则表达式,并匹配包含数字的任何值,即使csv文件中的行有其他前导或尾随数字:您可能需要grep-w
或类似值。“xx-yy”是什么在结束时?这是两个输入文件,你正在搜索一个在另一个
grep -f "a.txt" "b.txt"
0891234
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
awk -F"," '
{
if (nowfile==""){ nowfile = FILENAME; }
if(FILENAME == nowfile)
{
hash[$0]=$0;
}
else
{
if($0 ~ hash[$0])
{
print $0
}
}
} ' xx yy