แก้ไขบรรทัดแรกของไฟล์ข้อความขนาดใหญ่


16

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

มีวิธีง่ายๆที่ฉันสามารถทำได้ในทุบตี?


มีเหตุผลบางอย่างที่คุณไม่สามารถใช้เครื่องมือแก้ไขข้อความ
dangph

ไฟล์ใหญ่เกินไปมีขนาดใหญ่กว่าหน่วยความจำเสมือนสูงสุดของฉันถึง 20 เท่าในเครื่องนี้
lynks

1
ยุติธรรมพอสมควร ฉันรู้สึกว่าบรรณาธิการข้อความที่ดีสามารถจัดการกับไฟล์ที่มีขนาดใหญ่มากเพราะพวกเขาโหลดได้มากเท่าที่พวกเขาต้องการในหน่วยความจำ แต่หลังจากอ่านคำถามอื่น ๆ แล้วดูเหมือนว่าพวกเขาส่วนใหญ่มีปัญหากับพวกเขา
dangph

@dangph True ... อาจแปลก แต่เก่าและล้าสมัย "ตัวแก้ไขข้อความ" (หรือที่เรียกว่า) เช่นedlinสำหรับ ms-dos หรือedUnix ไม่ปรากฏว่ามีปัญหานี้ แต่ที่ตัวแก้ไขบรรทัด ... RAM ที่ เวลานี้เป็นสิ่งที่หายากและมีค่าและขนาดไฟล์ในหน่วยกิกะไบต์เป็นสิ่งที่ไม่น่าเชื่อ! ;)
Laurent

เพื่อให้สิ่งต่าง ๆ ชัดเจน): ฉันไม่ควรพลาดed!!! แต่มันจะเป็นแบบที่ดีในกรณีนี้ (ไม่แน่ใจว่ามันสามารถจัดการไฟล์ที่มีขนาดนี้ ... )
เรน

คำตอบ:


22

คุณสามารถใช้lessเพื่อดูสิ่งที่คุณต้องการแก้ไขและใช้sedเพื่อทำการเปลี่ยนแปลง วิธีนี้คุณแก้ไขได้โดยไม่ต้องโหลดไฟล์ทั้งหมด

อีกวิธีหนึ่งคือการแบ่งไฟล์แก้ไขและเข้าร่วมอีกครั้ง:

split -b 10000k <file>

and to join:

cat xa* > <file>

โหวตขึ้นสำหรับ sed
atroon

ยอดเยี่ยมแยกและเข้าร่วมเป็นสิ่งที่ฉันกำลังมองหาขอบคุณ
lynks

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

4
sed จะใช้เวลาหลายชั่วโมงกว่าจะเรียกใช้ไฟล์ทั้งหมด (ซึ่งอยู่ภายใต้ครึ่ง TB) การเปลี่ยนแปลงนี้อยู่ที่บรรทัดแรกเท่านั้นการแยกออกดูเหมือนจะสมเหตุสมผล
lynks

3

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

โปรดระลึกไว้เสมอว่าคุณสามารถสตรีมแก้ไขไฟล์ด้วย sed หากต้องการแทนที่บรรทัดแรกให้ทำสิ่งนี้ (GNU sed):

< oldfile sed '1c\new_heading' > newfile
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.