เปรียบเทียบไฟล์สองไฟล์แบบบรรทัดต่อบรรทัดอย่างเคร่งครัดโดยไม่มีการแทรกหรือลบ


14

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

file1:       file2:

0001    |    0001
ABCD    |    FFFF
1234    |    ABCD
FFFF    |    1234

ตอนนี้diff -uจะแสดงการแทรกและการลบเพียงครั้งเดียวถึงแม้ว่า 3 บรรทัด (ตำแหน่งหน่วยความจำ) มีการเปลี่ยนแปลงระหว่างสองไฟล์:

 0001
+FFFF
 ABCD
 1234
-FFFF

มีวิธีง่าย ๆ ในการเปรียบเทียบสองไฟล์เช่นว่าแต่ละบรรทัดจะถูกเปรียบเทียบกับบรรทัดเดียวกันเท่านั้น (ในแง่ของหมายเลขบรรทัด) ในไฟล์อื่น ๆ ? ดังนั้นในตัวอย่างนี้มันควรจะรายงานว่าช่วง 3 สายที่มีการเปลี่ยนแปลงพร้อมกับสายการเปลี่ยนแปลงจากและfile1 file2ผลผลิต doen't จะต้องมีความแตกต่างสไตล์ แต่มันจะเย็นถ้ามันอาจจะมีสี (สีสักครู่ผมที่diff -uส่งออกใช้sedเพื่อให้ได้อย่างง่ายดายสามารถนำไปปรับใช้)

คำตอบ:


19

นี่อาจเป็นวิธีการ:

diff <(nl file1) <(nl file2)

ด้วยnlหมายเลขบรรทัดที่diffจดจำบรรทัดทีละบรรทัด


3
เยี่ยมมากฉันไม่รู้โปรแกรม nl บรรดาเครื่องมือยูนิกซ์มีประโยชน์จริงๆ แต่มีจำนวนมากดังนั้นของพวกเขา
ฟริตซ์

1
ฉันเพิ่งลองสิ่งนี้และน่าเสียดายที่ฉันได้รับคือ: ทุกบรรทัดของไฟล์แรกตามด้วยทุกบรรทัดของไฟล์ที่สอง ... แทนที่จะเป็นบรรทัดที่ 1 จากไฟล์ 1 ตามด้วยบรรทัดที่ 1 จากไฟล์ที่สองตามด้วยบรรทัดที่ 2 จากไฟล์หนึ่งตามด้วยบรรทัด 2 จากไฟล์ 2 ...
Michael Hewson

@MichaelHewson ดูเหมือนว่าไฟล์สองไฟล์ของคุณจะไม่มีบรรทัดเหมือนกัน ในกรณีนี้นั่นเป็นวิธีการdiffทำงาน คุณอาจลองใช้โปรแกรม gui meldซึ่งแสดงไฟล์สองไฟล์เคียงข้างกัน เช่นเดียวกับในmeld <(nl file1) <(nl file2)
Fritz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.