2016-09-14 7 views
-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 

残念ながら、私は修正を行うために十分にスクリプトを理解していません(試しが不足しているためではありません)。
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 
+0

は、そのCコードのですか?これは 'awk'を使って書かなければなりませんか? –

+0

は、好ましくはスクリプトで書かれている。ちょうどawkで元のデータのクリーンアップが行われたので、awkを続けるといいと思いました。 –

+0

「スクリプト」があまりにも一般的です。どのようなプログラミング言語ですか? –

答えて

0

はここでPythonの答えです。

一般的なアルゴリズム:

  • ロードリストnが "ウィンドウ" のサイズはn = 2..5については、
  • にすべての文字。そのウィンドウをリストの上に「スライド」させ、それらの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') 
0

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では

0

別:

{ 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) 
     } 
}