คำสั่งวาง: การตั้งค่าตัวคั่น (หลาย)


9

ใน Linux ฉันมีปัญหาดังต่อไปนี้ด้วยpasteจาก (GNU coreutils) 8.13:

การพยายามตั้งค่าตัวคั่นอื่นนอกเหนือจากค่าเริ่มต้น (TAB) จะทำให้เกิดการพิมพ์อักขระตัวแรกของตัวคั่นที่กำหนดหรือเพิกเฉยได้อย่างสมบูรณ์

คำถาม : หนึ่งกำหนดตัวคั่น (หลาย) วิธีเมื่อใช้ paste ?

เพียงใช้เช่นabc-123เนื่องจากตัวคั่นจะดี ด้วย "หลาย" ฉันหมายถึงเช่น 2 TABS แทนที่จะเป็นหนึ่ง


รูปแบบที่ล้อมรอบตัวคั่นที่ฉันได้ลองไปแล้วคือ

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

ทั้งหมดที่มีผลลัพธ์เดียวกัน: ยอมรับเฉพาะอักขระตัวแรกหรือละเว้นอย่างสมบูรณ์ ฉันได้ลองใช้เวอร์ชันย่อ-d"\"และหลายอินสแตนซ์แล้ว & ndahs; ไม่มีอะไร

นอกจากนี้:

  • --delimiters="\\" →ข้อความผิดพลาด

ทำงานได้อย่างสมบูรณ์แบบแม้ว่าจะไม่ใช่สิ่งที่ฉันต้องการ:

  • --delimiters="\n" →ขึ้นบรรทัดใหม่
  • --delimiters="\0" →ไม่มีอะไรในระหว่าง
  • --delimiters="\t"TABค่าเริ่มต้น ยิ่งใหญ่

คำตอบ:


17

หากต้องการมีabcinb ระหว่าง file1 และ file2 คุณสามารถทำได้:

paste -d abc file1 /dev/null /dev/null file2

หรือ:

paste -d abc file1 - - file2 < /dev/null

หากคุณต้องการสองแท็บ:

paste file1 /dev/null file2

"การใช้/dev/nullเพื่อสร้างสองคอลัมน์ในการประมวลผลข้อความ " ทำงาน (นอกเหนือจาก: ความรู้ทั่วไปที่ฉันพลาดไปแล้วและถ้าไม่: คุณได้รับข้อมูลนี้จากที่ใด)
erch

1
@ Chirp.NotLuke /dev/nullทำหน้าที่เหมือนไฟล์ที่ว่างเปล่าเมื่ออ่านเพื่อให้คุณวางกำลังfile1และไฟล์ว่างเปล่าและไฟล์ที่ว่างเปล่า file2 กับแยกเป็นในทางกลับกันa, และb cรายละเอียดเกี่ยวกับวิธีการ-dทำงานในpasteหน้าคน
Stéphane Chazelas

@ StéphaneChazelasคุณสามารถเพิ่มpr -mts'abc' file1 file2เป็นทางเลือกได้หรือไม่
Sundeep

4

เป็นเพราะคุณให้ไฟล์เพียงสองไฟล์เพื่อเข้าร่วมอักขระแต่ละตัวของสตริงตัวคั่นจะใช้ระหว่างการรวมบรรทัดแต่ละบรรทัดจากไฟล์อินพุตแต่ละไฟล์

เช่น

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...

2

สำหรับระบบ BSD (ไม่ใช่ Linux ที่รู้) มีlamยูทิลิตี้ (เหมือนใน“ ลามิเนต”) ซึ่งเร็วกว่าและสั้นกว่าโซลูชันด้านบน:

lam file1 -s delimiter file2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.