2017-02-08 21 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 и новых SEDs GNU где -E = Extended Regexps. С любой СЭД:

$ 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] '. –

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 

 Смежные вопросы

  • Нет связанных вопросов^_^