2017-02-08 49 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 
相关问题