การเปลี่ยนหลายบรรทัดเป็นบรรทัดเดียวด้วยช่องว่างใน linux


0

ฉันมีข้อมูลต่อไปนี้ที่มีหลายบรรทัด

username: joe
empid: 1111
status: resigned

username: tom
emid: 1234

username: kate
empid: 2222
status: resigned

สิ่งที่ฉันต้องการคือการรับข้อมูลไปยังไฟล์อื่นดังต่อไปนี้

username: joe,empid: 1111,status: resigned
username: tom,empid: 1234
username: kate,empid: 2222,status: resigned

ด้วยความปรารถนาดี KJ


คุณรู้วิธีใช้บรรณาธิการหรือไม่?
Debra

คำตอบ:


3

นี่คือ perl รุ่นที่สั้นกว่า:

perl -000 -ne 's/\n+/,/g; s/,$//g; print "$_\n"' filename.txt

-000 เปิดใช้งานโหมดย่อหน้าที่บรรทัดใหม่ต่อเนื่องหลายรายการกำหนดอินพุตเรคคอร์ด


0

ฉันจัดการเพื่อใช้

perl -p -e 's/\n/,/' filename.txt | perl -p -e 's/,,/\n/g' | perl -p -e 's/,\Z/\n/g'

คำสั่งแรกแทนที่บรรทัดใหม่ด้วยเครื่องหมายจุลภาคที่สองจะขึ้นบรรทัดใหม่ที่ตำแหน่งที่มีสองบรรทัดใหม่ก่อนหน้าและบรรทัดที่สามจะลบสิ่งประดิษฐ์จุลภาคสุดท้ายและแทนที่ด้วยบรรทัดใหม่

อาจเป็นไปได้ที่จะทำทั้งหมดนี้ในคำสั่งเดียว แต่ฉันไม่คุ้นเคย perl ที่จะทำมัน เหตุผลที่ฉันใช้ที่นี่ก็คือ sed ไม่เสนอทางออกที่ง่ายในการแทนที่บรรทัดใหม่


0

ใช้เพ่งพิศ

gawk '{s=$1 $2;for(i=3;i<NF;i+=2) {s=s "," $i $(i+1)}print s}' RS= IFS=":"  input.txt

แต่โปรดทราบว่าช่อง "eats" นี้อยู่หลัง "field separator" (:)


-2

คุณยังสามารถใช้ tr:

tr '\n' ',' filename.txt

มันไม่ทำงานมันจะพิมพ์ทุกอย่างในบรรทัดเดียว นอกจากนี้ tr ต้องการไฟล์ที่จะเปลี่ยนเส้นทาง tr 'a' 'b' < file.txt.
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.