เชื่อมต่อฟิลด์ต่าง ๆ ด้วยตัวคั่นที่แตกต่างกัน


2

ฉันมีไฟล์คั่นด้วยแท็บดังนี้:

chr1    53736473        54175786
chr1    56861276        56876438
chr1    57512145        57512200

ฉันต้องการต่อผลลัพธ์ทั้งสามฟิลด์เข้าด้วยกันดังนี้

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

ฉันลองด้วยpaste -d ':-' fileซึ่งดูเหมือนจะไม่ทำงาน ใครช่วยได้บ้าง

จะเป็นการดีที่จะมีคำสั่ง unix ง่ายฉันรู้ว่ามันค่อนข้างง่ายกับภาษาที่สูงขึ้น


ขอโทษที่ทำให้ฉันอาย
Jun Cheng

คำตอบ:


5

ด้วย 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 นั้นก็สวยงามเช่นกัน
Jun Cheng

sed 's/\t\(\S\+\)\t/:&-/' fileง่ายมาก
Costas

@Costas คุณอาจหมายถึง\1ไม่ใช่&: sed 's/\t\(\S\+\)\t/:\1-/'. ใช่มันสั้นกว่า
jimmij

@jimmij ฉันทำผิดพลาดขอบคุณสำหรับการแก้ไข
Costas



2

ด้วยpasteและprintf:

$ printf '%s\n%s\n%s\n' $(cat file) | paste -sd ':-\n' -
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.