如何在比赛结束后打印并直到另一场比赛

时间:2016-02-23 16:30:46

标签: regex sh

我正在尝试创建一个脚本,以便从大文本文件中提取一定数量的行。我有一个包含要在主文件中查找的id-number的id文件,当找到匹配项时,我想打印出某些字段,直到找到结束字符串。然后我想查找所有出现的文本行,其中第一行包含相同的id-number,然后读入下一个id-number并重新启动该过程直到所有id-number都被测试。

文本文件如下所示:(开头格式不正确)

" part_1 / group_01 / p1_g01_f1_1_t-A0001"

1779年1866年哈哈 1866年1945年&#34; A: 1945年1991年d du 1991 2049 "}: 2049 2115 n noen 2115 2260 ""u: 2260 2319 @ 2319 2376 N 2376 2399 g gang 2399 2514 "A 2514 2601 N 2601 2701 s sett 2701 2768 "e 2768 2804 t 2804 2909 s stokkmaur 7850 8906 <end> <end> . "part_1/group_01/p1_g01_f1_1_t-a0002" 0 1617 <start> <start> 1617 1709 f Frå 1709 1776 4 1776 1846 "O: 1846 1909 n neste 1909 2013 ""{ 2013 2101 s 2101 2177 t 2177 2216 @ 2216 2286 v veke 2286 2467 ""e: 2467 2549 k 2549 2601 @ 2601 2755 "A: av 2755 2823 v vert 2823 2930 "{ 2930 2986 <end> <end>

id文件如下所示:

A0002 b0507 c0576

等等

所以我希望脚本在包含数字a0002的文本文件(trans.txt)中找到第一个匹配项,然后打印出所有内容,直到它与结束字符串匹配,然后打印出第一行的下一行序列匹配a0002直到找到所有匹配项。然后我想从id文件(b0507)中读取下一个id-number并重复整个过程直到读取所有id-number。

1 个答案:

答案 0 :(得分:0)

对于任何一个ID搜索,您可以使用sed,如下所示,例如

sed -n "/a0002/,/<end>/p" file

在找到a0002之前抑制正常输出,然后在<end>的下一次出现时打印所有行。

<强>输出

"part_1/group_01/p1_g01_f1_1_t-a0002"
0   1617    <start> <start>
1617    1709    f   Frå
1709    1776    4
1776    1846    "O:
1846    1909    n   neste
1909    2013    ""{
2013    2101    s
2101    2177    t
2177    2216    @
2216    2286    v   veke
2286    2467    ""e:
2467    2549    k
2549    2601    @
2601    2755    "A: av
2755    2823    v   vert
2823    2930    "{
2930    2986    <end>   <end>

要读取所有ID(由空格字符分隔),从单独的 id-file 中读取 parts-file 中的每个ID,请使用:

for i in $(< id-file); do
    sed -n "/$i/,/<end>/p" parts-file
done

对于 id-file 中的每个ID,它都会做同样的事情(例如a0002b0507c0576