Awk 序列模式提取

Awk 序列模式提取,awk,sequential,Awk,Sequential,有谁能帮我写一个脚本来提取顺序行吗? 我能够找到并得到一个脚本来创建给定输入的所有排列,但这不是我需要的 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 }

有谁能帮我写一个脚本来提取顺序行吗?
我能够找到并得到一个脚本来创建给定输入的所有排列,但这不是我需要的

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
outputfile.txt:

A
B
C
D
E
F
G
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

这里有一个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')

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
$awk'开始{n=1}
FNR==1{n++}
{a[c++]=$0;c=c%n}
FNR>n-1{for(i=c;iawk中的另一个:

{ 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)
        }
}
{a[NR]=$0}
结束{
o[0]=ORS

对于(i=2;iIs)C代码?是否必须使用
awk
编写?最好使用脚本编写。只是原始数据的清理是在awk中完成的,所以我认为继续使用awk会很好。“脚本”太通用了。什么编程语言?