打印 2 个匹配之间的行

问题描述 投票:0回答:1

考虑到我有一个包含大量数据的文件,我想捕获 2 个匹配之间的数据并将捕获的数据移动到单独的临时文件中,免责声明:数据字符串包含正斜杠“/”。

1 title {data1/A}
2 ..
3 ..
4 ..
5 title
6 title {data1/data2/AB}
7 ..
8 ..
9 ..
10 title
11 title {data1}
12 ..
13 ..
14 ..
15 title
16 title {data1/data2/AB/data3}
17 ..
18 ..
19 ..
20 title

现在,每当它捕获“B”时,它应该在临时文件中的匹配行和标题行之间移动数据,就像这里从第 6 行到第 10 行,从第 16 行到第 20 行

我试过了,

awk '/B/,/^title$/' file > temp

这会使用该数据创建一个名为 temp 的新文件,但原始文件保持原样,我想要 2 个单独的文件,一个是临时文件,另一个是删除了临时文件数据的原始文件。

也不知道是否执行正确,该文件是一百万行文件。

shell perl awk tcl
1个回答
0
投票
awk -v with=temp_with -v without=temp_without '
      BEGIN { dest = without }
  /^title$/ { dest = without }
        /B/ { dest = with }
            { print > dest }
' file

您可以使用

diff
检查发生了什么。例如:

diff -u file temp_with | less
© www.soinside.com 2019 - 2024. All rights reserved.