我正在尝试创建一个脚本,以便从大文本文件中提取一定数量的行。我有一个包含要在主文件中查找的id-number的id文件,当找到匹配项时,我想打印出某些字段,直到找到结束字符串。然后我想查找所有出现的文本行,其中第一行包含相同的id-number,然后读入下一个id-number并重新启动该过程直到所有id-number都被测试。
文本文件如下所示:(开头格式不正确)
" part_1 / group_01 / p1_g01_f1_1_t-A0001"
1779年1866年哈哈 1866年1945年" A: 1945年1991年ddu
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。
答案 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,它都会做同样的事情(例如a0002
,b0507
和c0576
)