查找从一个文件到另一个文件的值并筛选出匹配的模式,直到分隔符

时间:2015-06-17 23:25:07

标签: shell unix

我有两个文件

refer.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

基本上,refer.txt应该在main.txt中进行查找,如果模式匹配则应该从main.txt中获取整个字段并将其放在输出文件夹中。

我尝试过以下代码:

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

但没有工作。请帮忙

3 个答案:

答案 0 :(得分:1)

以下使用egrep为我工作:

ChrPlus.addActionListener(final ActionEvent theEvent) {
     BarterPts.setText(//New text here based off a function);
}

<强>更新 要用逗号分隔输出,只需附加另一个tr命令,如下所示。

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

答案 1 :(得分:0)

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

tmpfile=tf$$
tr , '\n' < refer.txt > $tmpfile
tr , '\n' < main.txt | grep -f $tmpfile | tr '\n' ,
rm $tmpfile

这仍有一些问题,但这是一个开始。

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

答案 2 :(得分:0)

pattern=`tr ',' '|' < "test1.txt"`
zoo=$(tr ',' '\n' < "test2.txt" | egrep "$pattern" | tr '\n' ,)

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

这很有用