Shell 将一个值从一个文件查找到另一个文件,并过滤出匹配的模式,直到delimeter

Shell 将一个值从一个文件查找到另一个文件,并过滤出匹配的模式,直到delimeter,shell,unix,Shell,Unix,我有两个文件 reference.txt hello/john,hi/roshan,bye/jill,ok/rashmi main.txt ok/sara/1.0,hello/john/2.1,to/mary/1.2,bye/jill/3.1,cya/trina/2.1 所以现在我需要创建一个新的文件output.txt,如下所示 hello/john/2.1,bye/jill/3.1 基本上,reference.txt应该在main.txt中进行查找,如果模式匹配,它应该从main.tx

我有两个文件

reference.txt

hello/john,hi/roshan,bye/jill,ok/rashmi
main.txt

ok/sara/1.0,hello/john/2.1,to/mary/1.2,bye/jill/3.1,cya/trina/2.1
所以现在我需要创建一个新的文件output.txt,如下所示

hello/john/2.1,bye/jill/3.1
基本上,reference.txt应该在main.txt中进行查找,如果模式匹配,它应该从main.txt获取整个字段,并将其放在输出文件夹中

我尝试了以下代码:

patterns="/soa/admin/raj/test1.txt"
search="/soa/admin/raj/test2.txt"
grep  - -f <(tr ',' '\n' < "${patterns}") "${search}"
patterns=“/soa/admin/raj/test1.txt”
search=“/soa/admin/raj/test2.txt”

grep--f这是解决方案的第一个切入点。我发现创建临时文件最简单,然后将其用作grep模式:

tmpfile=tf$$
tr , '\n' < refer.txt > $tmpfile
tr , '\n' < main.txt | grep -f $tmpfile | tr '\n' ,
rm $tmpfile
tmpfile=tf$$
tr,'\n'$tmpfile
tr,'\n'
这仍然有一些问题,但这只是一个开始


如果每个模式都以
^
开头,以
/
结尾会更好。这也很容易实现。

下面的内容对我使用egrep很有用:

pattern=`tr ',' '|' < "refer.txt"`
tr ',' '\n' < "main.txt" | egrep "$pattern"
pattern=`tr',''|'<“reference.txt”`
tr',''\n'<“main.txt”| egrep“$pattern”
更新: 要获得以逗号分隔的输出,只需附加另一个tr命令,如下所示

pattern=`tr ',' '|' < "refer.txt"`
tr ',' '\n' < "main.txt" | egrep "$pattern" | tr '\n' ','
pattern=`tr',''|'<“reference.txt”`
tr',''\n'<“main.txt”| egrep“$pattern”| tr'\n'','
pattern=`tr',''|'

这起作用了

谢谢你的工作……我需要用逗号分隔的o/p文件
pattern=`tr ',' '|' < "test1.txt"`
zoo=$(tr ',' '\n' < "test2.txt" | egrep "$pattern" | tr '\n' ,)

echo 'COMPOSITES='$zoo > newfile.txt
sed -i '$s/,$//' newfile.txt