ループ内の特定の検索変数の最後のインスタンスの後に文字列または行を挿入します。

ループ内の特定の検索変数の最後のインスタンスの後に文字列または行を挿入します。

特定のコーディングの問題に役立つ人がいるかどうか疑問に思います。次の内容を含むDNAシーケンシングファイルがあります(例:)。

Plate1A1_R1_AGTAGTACGACTAGCATCAGCATACGATCAGCATCAGCATCAG 
Plate1A1_R1_GTAGATCGATGCATGCATGCTAGCTAGCTAGCTAGCTAGCTAA 
Plate1A1_R1_AGCTAGCATCGATCGATGCTAGCATGCATCGATCGATGCATGC 
Plate1A1_R2_AGCATCGATGCAGCATGCTAGCTAGCTAGCTAGCAGCTAGTCT 
Plate1A1_R2_AGCATGCATCGATCGTAGCTAGCAGCGAGCGGCATCGATCGAT 
Plate1A2_R1_CAGCTAGATGCATCGATCGATCGATCGATCGATGCTAGCTTAC 
Plate1A2_R1_CAGTAGCATGCATGCATGCATGCATGCATCGATGCTAGCTAGC 
Plate1A2_R1_ACAACGTAGCTAGCTAGCTACTACTAGTCATCATCGATGCTAG 
Plate1A2_R1_CAGCTAGCTAGCTAGCTAGGCTACATCGATCGTAGCTAGTCGA 
Plate1A2_R1_CAGTCAGCATGCTATCGATCGTAGCTAGTCATCGATGTAGTGA
... etc.

いくつかの線が同じ類似の開始パターンに属することがわかります(ここではPlate1A1_R1、Plate1A1_R2、Plate1A2_R1)。次のように、各グループ化の後に空白行を入れたいと思います。

Plate1A1_R1_AGTAGTACGACTAGCATCAGCATACGATCAGCATCAGCATCAG 
Plate1A1_R1_GTAGATCGATGCATGCATGCTAGCTAGCTAGCTAGCTAGCTAA 
Plate1A1_R1_AGCTAGCATCGATCGATGCTAGCATGCATCGATCGATGCATGC 

Plate1A1_R2_AGCATCGATGCAGCATGCTAGCTAGCTAGCTAGCAGCTAGTCT
Plate1A1_R2_AGCATGCATCGATCGTAGCTAGCAGCGAGCGGCATCGATCGAT

Plate1A2_R1_CAGCTAGATGCATCGATCGATCGATCGATCGATGCTAGCTTAC 
Plate1A2_R1_CAGTAGCATGCATGCATGCATGCATGCATCGATGCTAGCTAGC 
Plate1A2_R1_ACAACGTAGCTAGCTAGCTACTACTAGTCATCATCGATGCTAG 
Plate1A2_R1_CAGCTAGCTAGCTAGCTAGGCTACATCGATCGTAGCTAGTCGA 
Plate1A2_R1_CAGTCAGCATGCTATCGATCGTAGCTAGTCATCGATGTAGTGA

... etc.

つまり、各行の最初の11文字を取得して、下の行でパターンが発生しなくなった点を検索し、その点に空白の行を挿入できる必要があります。

頑張ったsedそしてアッループの問題で問題が発生していますが、while read lineテキストファイルの連続した行に使用する検索変数の最初の11文字を格納する方法が見つからないようです(検索変数が単一行処理で「停止」した場合)。

誰かがリダイレクト(<)を介して参照ファイルにアクセスできるソリューションを提供できることを願っています。この形式には、数百行のDNA配列データがあり、ファイルを1つずつ渡すスクリプトで定義された数百の異なる「プレート名」があります。一行移動)、例えば

while read line ; do echo "${line:0:11}" ; done < filename.txt

どんなアドバイスもありがとうございます!

ベストアンサー1

awk '{
  thisplate=substr($0, 1, 11); 
  if (thisplate != plate) { 
    print ""; 
    plate=thisplate 
  };
  print }' < input | sed '1d'

これはSukminderが書いたコメントの長いバージョンです。 11文字のプレフィックスを保存し、新しいプレフィックスが古いプレフィックスと異なる場合は、改行文字を印刷します。空の最初の行を削除しますsed

おすすめ記事