2017-02-08 50 views
0

可以使用哪個sed/awk命令刪除第1列中每個字符串的最後一個數字(並刪除分隔符_)並將其移至新列(第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和較新的GNU SEDS其中-E =擴展正則表達式工作。對於任何的sed:

$ 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

兩個工作 - 謝謝! – emblake

+0

對不起,但如果我想保留最後一個數字,包括'_',第一列中的sed語句是什麼? – emblake

+0

在'[0-9]'之前移動'_'到parens中。 –

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 
相關問題