次のファイルがあります。
chr22 43089055 43089055 - NM_017436 C 300 903delC
chr22 43089715-43089717 43089715-43089717 - NM_017436 CTT 79
-
3列目の前のすべての文字を削除して、次のような出力を得たいと思います。
chr22 43089055 43089055 - NM_017436 C 300 903delC
chr22 43089715-43089717 43089717 - NM_017436 CTT 79
awk '{$2+=0}1' file
過去に削除された文字を使用したことがありますが、同じ-
技術を使用して現在の問題を解決できるとは思いません。どんな提案がありますか?
答え1
Perlが構造に来ます:
perl -lane 'BEGIN { $, = "\t" } $F[2] =~ s/.*-//; print @F' < file
-l
改行文字を追加print
-n
入力を1行ずつ読みます。-a
各行をスペースで分割して@F
配列を埋める$,
印刷時にリストメンバーを区切り、タブに設定s/.*-//
ダッシュの前のすべてを、3番目の列(0からインデックス付けされた配列)にバインドする何もないものに置き換えます。
答え2
様々なバリエーションで
アッ
awk '{$3=A[split($3,A,"-")]}1' file
sed
sed -r 's/((\S+\s+){2})[^- ]+-/\1/' file
答え3
使用awk
:
< input awk 'BEGIN {FS=OFS=" "} {gsub(/[^-]*-/, "", $3); print}'