İki dosyanın sadece ilk satırı nasıl fark edilir?


17

Tüm dosyanın aksine, iki dosyanın sadece ilk satırını ayırmak istiyorum. Bunu nasıl yaparım? Sadece ilk satır için bir çözüme ihtiyacım var, ama çok daha iyi bir cevap olacak satır sayısını belirtebilseydiniz.

Yani diff aşağıdaki iki dosya arasında hiçbir fark döndürmez:

a
1
2

ve:

a
3
4

bu senin için işe yaradı mı?
nerdwaller

@nerdwaller Yup, kabul etti.
gsingh2011

serin fasulye. Diğer seçenekleri düşünmeye çalışıyordu, neyse ki bu gerekli değil.
nerdwaller

Yanıtlar:


26

Hadi bakalım:

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

(Bu hiç bir şey dönecekti).

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

Returns:
2c2
< 1
---
> 3

Bahsettiğiniz şeyleri yapmak için bunu bir senaryoya dahil edebilirsiniz.

#!/bin/bash

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

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

Bunu kullanmak için, komut dosyasını çalıştırılabilir hale getirin chmod +x nameofscript.shve daha sonra ./nameofscript.sh ~/file1 ~/Docs/file2bu komutun sonuna daha fazla sayı eklemek istiyorsanız, varsayılan satır sayısını 1 olarak bırakır.

(Veya komut dosyanızda -f1 dosya1 -f2 dosya2 -n 1 ile anahtarlar yapabilirsiniz, ancak bunun için durum ifadesini kafamın üstünü hatırlamıyorum).

headtarafından önerilen satır sayısı en başından döner -n. Eğer ters yapmak istiyor olsaydınız, bu olurdu tail -n ${numLines}(kuyruk, satır sayısından geriye doğru yapar).

5/10/16 düzenle:

Bu Bash'a (ve uyumlu mermilere) özgüdür. Bunu başka bir şeyden kullanmanız gerekiyorsa:

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

İki dizini ayırmam gerektiğinde özyinelemeli fark için nasıl çalışır?
lanoxx

@lanoxx diff -r dir1 dir2dizinler için, sınırlamak için muhtemelen başka bir şeye boru bağlamak isteyeceksiniz. Özellikleriniz varsa, yeni bir soru açın ve buraya bir bağlantı verin.
nerdwaller

Temel olarak aynı soru sadece özyinelemeli: İki farklı dizindeki tüm dosyalar için sadece farklı (ilk n satır | ilk n satır hariç her şey).
lanoxx

Dediğim gibi @lanoxx, yeni bir soru sor ve bağlantı. Süper kullanıcı topluluğu için başka bir kullanıcının sorusunun kapsamını genişletmek yerine en iyi yöntemdir.
nerdwaller

1
@Veridian Hangi kabuğu kullanıyorsunuz? Bu bash -c "diff <(...) <(...)"
bash'e

-1

diff -U (satır sayısı) dosya1 dosya2


1
Süper Kullanıcıya Hoş Geldiniz! -UTartışmayı biraz açıklayabilir misiniz? :)
bertieb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.