GNU/Linux >> Belajar Linux >  >> Linux

Cara mendapatkan perbedaan (hanya penambahan) antara dua file di linux

diff lalu grep untuk jenis edit yang Anda inginkan.

diff -u A1 A2 | grep -E "^\+"

Pendekatan serupa untuk https://stackoverflow.com/a/15385080/337172 tetapi mudah-mudahan lebih mudah dipahami dan mudah disesuaikan:

diff \
  --new-line-format="%L" \
  --old-line-format="" \
  --unchanged-line-format="" \
  A1 A2

Sebagian besar di bawah ini disalin langsung dari jawaban serverfault @TomOnTime di sini. Di bagian bawah adalah upaya yang bekerja pada file yang tidak disortir, tetapi perintah mengurutkan file sebelum memberikan diff sehingga dalam banyak kasus tidak seperti yang diinginkan. Untuk diff yang diformat dengan baik dari file yang tidak disortir, Anda mungkin menganggap jawaban lain lebih berguna (terima kasih kepada @Fritz karena telah menunjukkan hal ini):

Tampilkan baris yang hanya ada di file a:(mis. apa yang dihapus dari a)

comm -23 a b

Tampilkan baris yang hanya ada di file b:(yaitu apa yang ditambahkan ke b)

comm -13 a b

Tampilkan baris yang hanya ada di satu file atau lainnya:(namun tidak keduanya)

comm -3 a b | sed 's/^\t//'

(Peringatan:Jika file a memiliki baris yang dimulai dengan TAB, itu (TAB pertama) akan dihapus dari keluaran.)

CATATAN:Kedua file harus diurutkan agar "comm" berfungsi dengan benar. Jika belum diurutkan, Anda harus mengurutkannya:

sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted

Jika file sangat panjang, ini mungkin cukup membebani karena memerlukan salinan tambahan dan karena itu ruang disk dua kali lebih banyak.

Sunting:perhatikan bahwa perintah dapat ditulis lebih ringkas menggunakan substitusi proses (terima kasih kepada @phk atas komentarnya):

comm -12 <(sort < a) <(sort < b)

Anda dapat mencoba ini

diff --changed-group-format='%>' --unchanged-group-format='' A1 A2

Opsi didokumentasikan dalam man diff :

       --GTYPE-group-format=GFMT
              format GTYPE input groups with GFMT

dan:

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

dan:

              GFMT (only) may contain:

       %<     lines from FILE1

       %>     lines from FILE2

       [...]

Linux
  1. Cara Mentransfer File Antara Dua Komputer menggunakan Perintah nc dan pv

  2. Cara Menggabungkan Dua File Teks di Linux

  3. Bagaimana cara mendapatkan perbedaan antara dua tanggal di bawah bash

  1. Linux – Bagaimana Cara Menghapus File yang Dibuat Antara Dua Kali?

  2. Cara Menggunakan Perintah find Linux untuk Menemukan File

  3. Bagaimana cara melakukan perbedaan biner pada dua file berukuran identik di Linux?

  1. Bagaimana menemukan semua file yang jarang di Linux

  2. Bagaimana saya bisa membedakan dua file XML?

  3. Bagaimana membedakan hanya baris pertama dari dua file?