Извлечение последовательного образца
Может кто-нибудь помочь мне о том, как написать скрипт для извлечения последовательных строк?
Мне удалось найти и получить скрипт, работающий для создания всех перестановок заданных входных данных, но это не то, что мне нужно.
awk 'function perm(p,s, i) {
for(i=1;i<=n;i++)
if(p==1)
printf "%s%s\n",s,A[i]
else
perm(p-1,s A[i]", ")
}
{
A[++n]=$1
}
END{
perm(n)
}' infile
К сожалению, я недостаточно хорошо понимаю сценарий, чтобы внести изменения (не из-за отсутствия попыток).
Мне нужно извлечь от 2 до 5 последовательных шаблонов строк / слов.
Вот иллюстрация того, что мне нужно:
Например.
inputfile.txt:
A
B
C
D
E
F
G
OutputFile.txt:
A B
B C
C D
D E
E F
F G
A B C
B C D
C D E
D E F
E F G
A B C D
B C D E
C D E F
D E F G
A B C D E
B C D E F
C D E F G
3 ответа
awk
в помощь!
$ awk 'BEGIN{n=1}
FNR==1{n++}
{a[c++]=$0; c=c%n}
FNR>n-1{for(i=c;i<c+n-1;i++) printf "%s ",a[i%n];
print}' file{,,,}
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
многократное сканирование входного файла (количество запятых). Используемый seq 9
в качестве входного файла.
Еще один в awk:
{ a[NR]=$0 }
END {
o[0]=ORS
for(i=2;i<=5;i++)
for(j=1;j<=length(a);j++) {
printf "%s%s", a[j], (++k==i?o[k=0]:OFS)
if(!k&&j!=length(a)) j-=(i-1)
}
}
Вот ответ Python.
Общий алгоритм:
- Загрузить все буквы в список
- Для n = 2..5, где n - размер "окна". Вы "скользите" этим окном по списку и печатаете эти n символов.
Python хорош для этого из-за нарезки списка.
with open('input.txt') as f_in, open('output.txt', 'w') as f_out:
chars = f_in.read().splitlines()
for n in range(2, 6):
for start_window in range(len(chars) - n + 1):
f_out.write(' '.join(chars[start_window:start_window + n]))
f_out.write('\n')