Bagaimana cara membedakan hanya baris pertama dari dua file?

17

Saya ingin hanya membedakan baris pertama dari dua file, yang bertentangan dengan seluruh file. Bagaimana saya melakukannya? Saya hanya perlu solusi untuk baris pertama, tetapi jika Anda bisa menentukan jumlah baris yang akan menjadi jawaban yang jauh lebih baik.

Jadi diff akan mengembalikan tidak ada perbedaan antara dua file berikut:

a
1
2

dan:

a
3
4
gsingh2011
sumber
apakah itu berhasil untuk Anda ...?
nerdwaller
@nerdwaller Yup, diterima.
gsingh2011
kacang dingin. Sedang berusaha memikirkan opsi lain, untungnya itu tidak perlu.
nerdwaller

Jawaban:

26

Ini dia:

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

(ini tidak akan menghasilkan apa-apa).

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

Returns:
2c2
< 1
---
> 3

Anda bisa memasukkannya ke dalam skrip untuk melakukan hal-hal yang Anda sebutkan.

#!/bin/bash

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

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

Untuk menggunakannya, cukup buat skrip yang dapat dieksekusi dengan chmod +x nameofscript.shdan kemudian jalankan, ./nameofscript.sh ~/file1 ~/Docs/file2Itu meninggalkan # baris default pada 1, jika Anda ingin lebih menambahkan nomor ke akhir perintah itu.

(Atau Anda dapat melakukan switch pada skrip Anda dengan -f1 file1 -f2 file2 -n 1, tapi saya tidak ingat bagian atas kepala saya pernyataan kasus untuk itu).

headmengembalikan dari awal baris seperti yang disarankan oleh -n. Jika Anda ingin melakukan kebalikannya, itu akan menjadi tail -n ${numLines}(ekor tidak dari ujung belakang jumlah garis).

Edit 5/10/16:

Ini khusus untuk Bash (dan shell yang kompatibel). Jika Anda perlu menggunakan ini dari sesuatu yang lain:

bash -c 'diff <(...) <(...)'
nerdwaller
sumber
Bagaimana cara kerjanya untuk diff rekursif ketika saya perlu diff dua direktori?
lanoxx
@lanoxx diff -r dir1 dir2untuk direktori, untuk membatasinya Anda mungkin ingin menyalurkannya ke hal lain. Jika Anda memiliki spesifik, buka pertanyaan baru dan berikan tautan di sini.
nerdwaller
Yah pada dasarnya pertanyaan yang sama hanya secara rekursif: Diff saja (n baris pertama | semuanya kecuali n baris pertama) untuk semua file dalam dua direktori.
lanoxx
@lanoxx seperti yang saya katakan, buat pertanyaan baru dan tautkan. Ini praktik terbaik untuk komunitas pengguna super alih-alih memperluas cakupan beberapa pertanyaan pengguna lain.
nerdwaller
1
@ Veridian Shell apa yang Anda gunakan? Ini khusus untuk bash, jadi Anda mungkin perlu meneleponbash -c "diff <(...) <(...)"
nerdwaller
-1

diff -U (n of lines) file1 file2

Andress
sumber
1
Selamat Datang di Pengguna Super! Bisakah Anda menguraikan sedikit tentang -Uargumen? :)
bertieb