Shell 将一个值从一个文件查找到另一个文件,并过滤出匹配的模式,直到delimeter
我有两个文件 reference.txtShell 将一个值从一个文件查找到另一个文件,并过滤出匹配的模式,直到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
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',''|'newfile.txt
sed-i'$s/,$/'newfile.txt
这起作用了谢谢你的工作……我需要用逗号分隔的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