カンマを削除し、カンマの後の完全な単語行を再印刷する方法

カンマを削除し、カンマの後の完全な単語行を再印刷する方法

文書:

chr1_156186369  chr1_156186369_A_C,T    A   C,T  33150.29  1/2:0,4,6:10:88:272
chr19_27732257  chr19_27732257_G_C      G   C    262.29    1/2:1,10,7:18:99:414,167
chrM_2619       chrM_2619_A_G,T         A   G,T  33023.29  1/2:0,5,5:10:99:293,144,129
chr9_119375271  chr9_119375271_T_A,G    T   A,G  248.29    1/2:1,11,5:17:99:359,107,113

2列と4列からカンマを削除し、カンマの後の単語の行全体を印刷します。

予想される出力は次のとおりです。

chr1_156186369  chr1_156186369_A_C  A   C   33150.29  1/2:0,4,6:10:88:272
chr1_156186369  chr1_156186369_A_T  A   T   33150.29  1/2:0,4,6:10:88:272 
chr19_27732257  chr19_27732257_G_C  G   C   262.29    1/2:1,10,7:18:99:414,167
chrM_2619       chrM_2619_A_G       A   G   33023.29  1/2:0,5,5:10:99:293,144,129
chrM_2619       chrM_2619_A_T       A   T   33023.29  1/2:0,5,5:10:99:293,144,129
chr9_119375271  chr9_119375271_T_A  T   A   248.29    1/2:1,11,5:17:99:359,107,113
chr9_119375271  chr9_119375271_T_G  T   G   248.29    1/2:1,11,5:17:99:359,107,113 

awkを試しましたが、結果が得られませんでした。ここでも同様の種類の質問を読みました。 特定の条件でファイルから行を抽出する方法

ベストアンサー1

awkを使用してください:

awk '{
  split ($2,w2,",");
  split ($4,w4,",");
  for (i in w4) {
    print $1,substr(w2[1],0,length(w2[1])-length(w4[i])) w4[i],$3,w4[i],$5,$6;
  }}'

列2と列4のコンマの後の値が等しくない場合、エラー処理は発生しません。

おすすめ記事