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

时间:2017-02-08 17:35:04

标签: awk sed cut

我可以使用哪个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

2 个答案:

答案 0 :(得分:0)

changedLoc

上面的内容适用于OSX sed和更新的GNU seds,其中-E = Extended Regexps。任何sed:

$ 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

答案 1 :(得分: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