2つの値ごとに単一の特定の列を複数の列に分割する

2つの値ごとに単一の特定の列を複数の列に分割する

5つのフィールド(5番目のフィールド幅= 200000値[0と1])を持つ遺伝子型ファイルがあります。

MA,30009,4,4,000010000111101011111000110100000000 .......
ME,30067,3,2,000010000111101011111000110100000000 .......
MI,30032,7,8,000010000111101011111000110100000000 .......

最後のフィールドを2つの値ごとに複数の列に分割したい(ncol = 100000)。出力が次のようになります。

MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00 .......
ME,30067,3,2,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00 .......
MI,30032,7,8,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00 .......

え?世話をする医者? sed?

助けが必要ですか?事前にありがとう

ベストアンサー1

awk 'BEGIN{FS=OFS=","}{gsub(/../,"&,",$NF)}1' file
  • BEGIN{FS=OFS=","}フィールド区切り記号をに設定します,
  • {gsub(/../,"&,",$NF)},最後のフィールド()$NFで2文字ごとに追加されます。
  • 1結果行を印刷します。

結果:

MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00,

上記のコマンドで生成された末尾のカンマを削除するには、アドインを使用してsub削除します。

awk 'BEGIN{FS=OFS=","}{gsub(/../,"&,",$NF);sub(/,$/,"",$NF)}1' file
MA,30009,4,4,00,00,10,00,01,11,10,10,11,11,10,00,11,01,00,00,00,00

おすすめ記事