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

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 <(...) <(...)'

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


1
Selamat Datang di Pengguna Super! Bisakah Anda menguraikan sedikit tentang -Uargumen? :)
bertieb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.