将每行的最后一个字符移动到新列
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
我可以使用哪个 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