2番目の列の2番目のコロンの後のすべての項目を削除し、残りのすべてを維持するにはどうすればよいですか?

2番目の列の2番目のコロンの後のすべての項目を削除し、残りのすべてを維持するにはどうすればよいですか?

file.bim次の約150万行のファイル()があります。

1   1:819959:C:T    0   819959  T   C
1   1:821249:G:A    0   821249  A   G
1   1:821477:A:G    0   821477  G   A
1   1:821843:C:T    0   821843  T   C
1   1:823963:A:C    0   823963  C   A
1   1:824357:C:T    0   824357  T   C
1   1:824398:A:C    0   824398  C   A
1   1:827972:G:A    0   827972  A   G
1   1:828539:A:T    0   828539  T   A

2番目の列から2番目のコロンと次の3文字を削除し、残りの列をそのまま残したいと思います。希望の出力は次のとおりですupdated_file.bim

1   1:819959    0   819959  T   C
1   1:821249    0   821249  A   G
1   1:821477    0   821477  G   A
1   1:821843    0   821843  T   C
1   1:823963    0   823963  C   A
1   1:824357    0   824357  T   C
1   1:824398    0   824398  C   A
1   1:827972    0   827972  A   G
1   1:828539    0   828539  T   A

を使ってみましたが、awkここではコロンだけが削除されましたが、その間の文字はそのまま残ります。

awk -F":" '{ print $1":"$2,$3,$4,$5,$6 }' file.bim > updated_file.bim

ベストアンサー1

次のプログラムを使用できますawk

awk '{sub(/:[^:]*:[^:]*$/,"",$2)}1' file.bim > updated_file.bim

または

awk '{sub(/(:[^:]*){2}$/,"",$2)}1' file.bim > updated_file.bim

この関数を使用して2番目の列()をsub()編集し、最後の2つの列とその後のテキストを「なし」に置き換えて、そのセクションを効果的に削除します。$2:

出力ファイルをタブで区切る必要がある場合awk -v OFS="\t" ' ... '

または、ファイルが次のように区切られた場合複数の「空間」で構成されるグループ区切り文字の形式が完全に変更されていないことを確認するには、次のようにします。

awk '{sub(/:[^:]*:[^: ]* /," ")}1' file.bim > updated_file.bim

:「、テキスト、、テキスト、:スペース」パターンを見つけて、そのパターンを単一の「スペース」に置き換えます。入力では、このパターンは列2の終わりにのみ発生するため、置換はその列にのみ影響します。

ついに、後でいつでも:2番目の列の - で区切られたフィールドの数が変更される可能性がありますが、まだ最初の2つだけを維持したい場合オリジナル2番目の列を最初の列の周りのテキストにのみ置き換える移植性が劣る変形ですが:(最後の2列の後に「なし」があるテキストの代わりに):

awk '{$2=gensub(/([^:]+:[^:]+).*/,"\\1","1",$2)}1' file.bim > updated_file.bim

おすすめ記事