วิธีแตกต่างบรรทัดแรกของสองไฟล์เท่านั้น?


17

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

ดังนั้น diff จะไม่แสดงความแตกต่างระหว่างสองไฟล์ต่อไปนี้:

a
1
2

และ:

a
3
4

มันเหมาะกับคุณหรือไม่?
nerdwaller

@nerdwaller Yup ได้รับการยอมรับ
gsingh2011

ถั่วเย็น พยายามคิดทางเลือกอื่น ๆ โชคดีที่ไม่จำเป็น
nerdwaller

คำตอบ:


26

ไปเลย:

diff <(head -n 1 file1) <(head -n 1 file2)

(สิ่งนี้จะไม่คืนสิ่งใดเลย)

diff <(head -n 2 file1) <(head -n 2 file2)

Returns:
2c2
< 1
---
> 3

คุณสามารถรวมมันเข้าไปในสคริปต์เพื่อทำสิ่งที่คุณพูดถึง

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

หากต้องการใช้เพียงทำให้สคริปต์ที่ใช้งานได้chmod +x nameofscript.shและจากนั้นดำเนินการ./nameofscript.sh ~/file1 ~/Docs/file2ซึ่งจะทำให้ # บรรทัดเริ่มต้นเป็น 1 หากคุณต้องการเพิ่มหมายเลขต่อท้ายคำสั่งนั้น

(หรือคุณสามารถสลับในสคริปต์ของคุณด้วย -f1 file1 -f2 file2 -n 1 แต่ฉันไม่จำส่วนบนสุดของหัวของคำสั่งกรณีนั้น)

headผลตอบแทนที่ได้จากจุดเริ่มต้น # -nของเส้นตามข้อเสนอแนะ หากคุณต้องการย้อนกลับมันจะเป็นtail -n ${numLines}ไปตามนั้น

แก้ไข 5/10/16:

นี่คือเฉพาะสำหรับ Bash (และเชลล์ที่เข้ากันได้) หากคุณต้องการใช้สิ่งนี้จากสิ่งอื่น:

bash -c 'diff <(...) <(...)'

มันจะทำงานอย่างไรสำหรับ diff แบบเรียกซ้ำเมื่อฉันต้องการ diff สองไดเร็กทอรี
lanoxx

@lanoxx diff -r dir1 dir2สำหรับไดเรกทอรีเพื่อ จำกัด คุณอาจต้องการไปป์ไลน์กับสิ่งอื่น หากคุณมีคำถามที่เฉพาะเจาะจงเปิดคำถามใหม่และให้ลิงค์ที่นี่
nerdwaller

โดยทั่วไปแล้วคำถามเดียวกันซ้ำแบบซ้ำ: Diff only (บรรทัดแรก n | ทุกอย่างยกเว้นบรรทัดแรก) สำหรับไฟล์ทั้งหมดในสองไดเรกทอรี
lanoxx

@lanoxx เหมือนที่ฉันพูดทำคำถามใหม่และเชื่อมโยงมัน เป็นแนวปฏิบัติที่ดีที่สุดสำหรับชุมชนผู้ใช้ระดับสูงแทนที่จะขยายขอบเขตของคำถามของผู้ใช้รายอื่น
nerdwaller

1
@Veridian คุณใช้เชลล์อะไรอยู่ นี่คือการทุบตีเฉพาะดังนั้นคุณอาจต้องโทรbash -c "diff <(...) <(...)"
nerdwaller

-1

diff -U (n of lines) file1 file2


1
ยินดีต้อนรับสู่ Super User! คุณสามารถอธิบายเพิ่มเติมเล็กน้อยเกี่ยวกับการ-Uโต้แย้งได้หรือไม่? :)
bertieb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.