2017-02-08 20 views
0

列1の各文字列の最後の数字を切り捨て(区切り文字_)するためにsed/awkコマンドを使用して、それを新しい列(列3)に移動できますか?例えば各行の最後の文字を新しい列に移動

$ head -3 test1.bed 
HLA:HLA00001_A*01:01:01:01_3503 1 
HLA:HLA02169_A*01:01:01:02N_3291 1 
HLA:HLA14798_A*01:01:01:03_2903 1 

はなるはずです

$ head -3 test1.bed 
HLA:HLA00001_A*01:01:01:01 1 3503 
HLA:HLA02169_A*01:01:01:02N 1 3291 
HLA:HLA14798_A*01:01:01:03 1 2903 

答えて

0
$ sed -E 's/(.*)_([0-9]+)(.*)/\1\3 \2/' file 
HLA:HLA00001_A*01:01:01:01 1 3503 
HLA:HLA02169_A*01:01:01:02N 1 3291 
HLA:HLA14798_A*01:01:01:03 1 2903 

上記OSXで動作するのsedと-E =拡張正規表現新しいGNUのSEDS。 - 感謝

$ sed 's/\(.*\)_\([0-9]*\)\(.*\)/\1\3 \2/' file 
HLA:HLA00001_A*01:01:01:01 1 3503 
HLA:HLA02169_A*01:01:01:02N 1 3291 
HLA:HLA14798_A*01:01:01:03 1 2903 
+0

仕事両方:すべてのsedのでは! – emblake

+0

申し訳ありませんが、最初の列に最後の数字( '_ 'を含む)を保持したい場合、sed文はどうなりますか? – emblake

+0

'[0-9]'の直前で '_'を括弧の中に移動します。 –

0
awk -F'[_ ]' '{print $1"_"$2,$4,$5,$3}' file 

HLA:HLA00001_A*01:01:01:01 1 3503 
HLA:HLA02169_A*01:01:01:02N 1 3291 
HLA:HLA14798_A*01:01:01:03 1 2903 
関連する問題