Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在另一个文件中查找一个文件的内容_Linux_Shell_Unix_Awk_Grep - Fatal编程技术网

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

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.

我使用以下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.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