Объединение различных полей с разным разделителем

У меня есть файл с разделителями табуляции:

chr1 53736473 54175786 chr1 56861276 56876438 chr1 57512145 57512200 

Я хочу объединить три поля, например:

 chr1:53736473-54175786 chr1:56861276-56876438 chr1:57512145-57512200 

Я попытался использовать paste -d ':-' file , который, видимо, не работал. Может ли кто-нибудь помочь?

В идеале это может быть с простой командой unix, я знаю, что это довольно просто с более высоким языком.

4 Solutions collect form web for “Объединение различных полей с разным разделителем”

С sed:

 $ sed 's/\(.*\)\t\(.*\)\t/\1:\2-/' file chr1:53736473-54175786 chr1:56861276-56876438 chr1:57512145-57512200 

Printf:

 printf "%s:%s-%s\n" $(< file) chr1:53736473-54175786 chr1:56861276-56876438 chr1:57512145-57512200 

Для вашего примера,

 awk '{print $1":"$2"-"$3}' your_file 

будет работать, но предполагается, что у вас всегда будет ровно 3 поля.

Вы можете использовать два выражения sed :

 sed -e "s/\t/,/" -e "s/\t/-/" your_file 

С paste и printf :

 $ printf '%s\n%s\n%s\n' $(cat file) | paste -sd ':-\n' - chr1:53736473-54175786 chr1:56861276-56876438 chr1:57512145-57512200 
Linux и Unix - лучшая ОС в мире.