sed -e:q -e'$!N;s/\n/&/9;tS' -e'$!bq' -e:S \
-e's|^query.*\n\(query\)|\1|;tq' -e'/\n/{P;D;}'
При этом 10 строк текущего входного файла всегда будут храниться в буфере sed
. Для каждой обычной строки ввода sed
будет P
записать первую из своих буферных строк, а затем D
удалит ее. В начале цикла N
ext sed
пополнит свой буфер входной строкой N
ext.
Если в любой момент query. * \ Nquery
совпадает в пределах своего 10-строчного окна, sed
удалит все совпадения, кроме завершающего запроса
. И в начале следующего цикла sed
будет собирать ввод до тех пор, пока он не заполнит все десять строк своего буфера скользящего окна, прежде чем пытаться снова протестировать ввод.
Вот простая демонстрация:
for i in 3 6 9 12 15 18
do
printf "%s %s %s %s%0${i}s" query ID1 content1 content2
done| tr \ \\n| nl -ba -w1 |
sed -e:q -e'$!N;s/\n/&/9;tS' -e'$!bq' -e:S \
-e's|^[0-9]*.query.*\n\([0-9]*.query\)|\1|;tq' \
-e'/\n/{P;D;}'
Я немного изменил регулярное выражение, чтобы приспособить nl
для вывода:
16 query
17 ID1
18 content1
19 content2
20
21
22
23
24
25
26
27
28 query
29 ID1
30 content1
31 content2
32
33
34
35
36
37
38
39
40
41
42
43 query
44 ID1
45 content1
46 content2
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 query
62 ID1
63 content1
64 content2
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
sed
отсекает все последовательности, которые полностью вписываются в его ввод - окно. Он не пропустит ни одного, и ему не нужно буферизовать больше десяти строк за раз. Если мы добавим l
ook в сценарий sed
, мы увидим, как выглядит его буфер:
for i in 3 6 9 12 15 18
do
printf "%s %s %s %s%0${i}s" query ID1 content1 content2
done| tr \ \\n| nl -ba -w1 |
sed -ne:q -e'$!N;l;s/\n/&/9;tS' -e'$!bq' -e:S \
-e's|^[0-9]*.query.*\n\([0-9]*.query\)|\1|;tq' \
-e'/\n/{P;D;}'
1\tquery\n2\tID1$
1\tquery\n2\tID1\n3\tcontent1$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t\n6\t$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t\n6\t\n7\tquery$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t\n6\t\n7\tquery\n8\tID\
1$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t\n6\t\n7\tquery\n8\tID\
1\n9\tcontent1$
1\tquery\n2\tID1\n3\tcontent1\n4\tcontent2\n5\t\n6\t\n7\tquery\n8\tID\
1\n9\tcontent1\n10\tcontent2$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t\n12\t$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t\n12\t\n13\t$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t\n12\t\n13\t\n14\t$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t\n12\t\n13\t\n14\t\n\
15\t$
7\tquery\n8\tID1\n9\tcontent1\n10\tcontent2\n11\t\n12\t\n13\t\n14\t\n\
15\t\n16\tquery$
16\tquery\n17\tID1$
16\tquery\n17\tID1\n18\tcontent1$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2\n20\t$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2\n20\t\n21\t$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2\n20\t\n21\t\n22\t$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2\n20\t\n21\t\n22\t\n23\
\t$
16\tquery\n17\tID1\n18\tcontent1\n19\tcontent2\n20\t\n21\t\n22\t\n23\
\t\n24\t$
Puede instalar Vuze a través desnap
(preinstalado en Ubuntu 18.04):
snap find vuze
salida de muestra:
Name Version Developer Notes Summary
vuze-vs 5.7.6.0-snap1 vs - Vuze is a powerful, open source, bittorrent client.
Instalar vuze:
$ sudo snap install vuze-vs
$ vuze-vs