다음과 같이 탭으로 구분된 파일이 있습니다.
chr1 53736473 54175786
chr1 56861276 56876438
chr1 57512145 57512200
다음과 같이 세 가지 필드 결과를 연결하고 싶습니다.
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
나는 그것을 시도했지만 paste -d ':-' file
분명히 작동하지 않습니다. 누구든지 도와줄 수 있나요?
이상적으로는 간단한 유닉스 명령을 사용하는 것입니다. 고급 언어를 사용하는 것이 상당히 쉽다는 것을 알고 있습니다.
답변1
sed를 사용하세요:
$ sed 's/\(.*\)\t\(.*\)\t/\1:\2-/' file
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
인쇄:
printf "%s:%s-%s\n" $(< file)
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
답변2
귀하의 예를 들어,
awk '{print $1":"$2"-"$3}' your_file
작동하지만 항상 3개의 필드가 있다고 가정합니다.
답변3
두 가지 표현식을 사용할 수 있습니다 sed
.
sed -e "s/\t/,/" -e "s/\t/-/" your_file
답변4
그리고 :paste
printf
$ printf '%s\n%s\n%s\n' $(cat file) | paste -sd ':-\n' -
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200