รายการบรรทัดจากไฟล์เดียวใน DIFF


34

ฉันต้องการได้รับ (GNU) DIFF เพื่อพิมพ์เฉพาะบรรทัดที่แตกต่างในไฟล์เดียว ได้รับดังนั้น

    ==> diffa.txt <==
    line1
    line2 - in a only
    line3
    line4 changed
    line5

    ==> diffb.txt <==
    line1
    line3
    line4 changed in b
    line5
    line6 in b only

ฉันต้องการdiff --someoption diffa.txt diffb.txtผลิต

    line2 - in a only

    line4 changed

ดังต่อไปนี้ดูเหมือนว่ามันจะเป็นประโยชน์ แต่มันเป็นความลับบิต:

   --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is `old', `new', or `unchanged'.
          GTYPE is LTYPE or `changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2

หน้าคนแน่นอนค่อนข้างสั้นในธงเหล่านี้! คำถามที่ดี.
quickshiftin

1
ฉันต้องการชี้ให้เห็นว่า 'ข้อมูลต่าง' จะให้ตัวอย่างที่สมบูรณ์มีข้อมูลมากมายในข้อมูล
Baroudi Safwen

คำตอบ:


42

ไม่แน่ใจว่าdiffสามารถทำคนเดียวได้ แต่คุณสามารถใช้พลังของยูทิลิตี้ GNU อื่น ๆ เพื่อช่วยคุณได้

diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'

มันต่างกันจากนั้นเลือกเฉพาะบรรทัดที่ขึ้นต้นด้วย '-' - เหล่านั้นจะถูกเปลี่ยนแปลงและมีค่าจากไฟล์ diffa.txt จากนั้นsedเพียงลบเครื่องหมาย '-' เหล่านั้น

แก้ไข:หลังจากทดลองไม่กี่ครั้งdiffดูเหมือนว่าคำสั่งด้านล่างจะสร้างสิ่งที่คุณต้องการ:

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

สำหรับวิธีปิดท่อเป็นเรื่องปกติ ฉันต้องการพิมพ์ `perl -ne" ถ้า s / ^ - // "" แต่นั่นคือรสชาติ ฉันคิดว่าฉันเห็นสิ่งที่--changed-group-format='%<'กำลังทำเพื่อฉันตอนนี้ ....
justintime

ขอบคุณ : DI ต้องการสิ่งนี้เพื่อแสดงรายการแพ็กเกจทั้งหมดของฉันระหว่างคอมพิวเตอร์สองเครื่องและฉันใช้ sdiff แต่มันดูดีขึ้นเล็กน้อย
Rob

12

วิธีที่ง่ายกว่านี้คือการใช้commโปรแกรมอรรถประโยชน์ linux (มันต้องการไฟล์ที่เรียงลำดับสำหรับการป้อนข้อมูล) มันเขียนไปยังเอาต์พุตมาตรฐาน:

  • บรรทัดที่ไม่ซ้ำกันสำหรับ diffa.txt

  • บรรทัดที่ไม่ซ้ำกันสำหรับ diffb.txt

  • เส้นที่พบบ่อย

และคุณสามารถระงับแต่ละรายการด้วยพารามิเตอร์ 1,2 หรือ 3 ตามลำดับ ดังนั้นในกรณีที่คุณจะมีลักษณะเช่นนี้:

comm -23 diffa.txt diffb.txt

มันไม่แสดงบรรทัดที่ไม่ซ้ำกันสำหรับ diffb.txt บรรทัดที่เหมือนกันและพิมพ์บรรทัดที่ไม่ซ้ำกันสำหรับ diffa.txt เท่านั้น

แหล่งที่มาจาก: https://www.tutorialspoint.com/unix_commands/comm.htm


ฉันพบสิ่งนี้ง่ายกว่ามากdiffที่ไม่ได้ทำในสิ่งที่ฉันคาดหวัง และฉันเชื่อว่ามันติดตั้งไว้แล้วทั้งบน BSD (เช่น Mac OS X) เช่นเดียวกับ Ubuntu ดังนั้นจึงไม่มีผู้จัดการฝันร้ายในแพ็คเกจ
Sridhar Sarnobat

3

ผมอยากจะพูดถึงว่าคาดเรียงไฟล์ข้อมูลและทำให้รายงานผลลัพธ์ที่แตกต่างกว่าcommdiff

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

เป็นสากล รุ่งโรจน์ถึง @vava

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