将每行的最后一个字符移动到新列

Move last character of each line to new column

我可以使用哪个 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
$ sed -E 's/(.*)_([0-9]+)(.*)/ /' 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]*\)\(.*\)/ /' 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
awk -F'[_ ]' '{print "_",,,}' 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