如何在一场比赛之后打印直到另一场比赛
How to print after a match and until another match
我正在尝试编写脚本以便从大型文本文件中提取一定数量的行。我有一个包含要在主文件中查找的 id 编号的 id 文件,当找到匹配项时,我想打印出某些字段,直到找到结束字符串。然后我想查找所有出现的文本行,其中第一行包含相同的 ID 号,然后再读取下一个 ID 号并重新启动该过程,直到测试所有 ID 号。
文本文件如下所示:(开头格式不正确)
"part_1/group_01/p1_g01_f1_1_t-a0001"
1779 1866 小时哈尔
1866 1945 “答:
1945 1991 天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 号并重复整个过程,直到读取所有 id 号。
任意一个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-file 中读取所有 id,以空白字符分隔,并在 parts-file[=34= 中找到每个 id ], 使用:
for i in $(< id-file); do
sed -n "/$i/,/<end>/p" parts-file
done
它将对 id-file 中的每个 ID 执行相同的操作(例如 a0002
、b0507
和 c0576
)
我正在尝试编写脚本以便从大型文本文件中提取一定数量的行。我有一个包含要在主文件中查找的 id 编号的 id 文件,当找到匹配项时,我想打印出某些字段,直到找到结束字符串。然后我想查找所有出现的文本行,其中第一行包含相同的 ID 号,然后再读取下一个 ID 号并重新启动该过程,直到测试所有 ID 号。
文本文件如下所示:(开头格式不正确)
"part_1/group_01/p1_g01_f1_1_t-a0001"
1779 1866 小时哈尔
1866 1945 “答:
1945 1991 天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 号并重复整个过程,直到读取所有 id 号。
任意一个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-file 中读取所有 id,以空白字符分隔,并在 parts-file[=34= 中找到每个 id ], 使用:
for i in $(< id-file); do
sed -n "/$i/,/<end>/p" parts-file
done
它将对 id-file 中的每个 ID 执行相同的操作(例如 a0002
、b0507
和 c0576
)