2 tane elimde txt dosyası var biri 10mb diğeri 18gb şimdi ben bu iki dosya içerisinde aynı olan içerikleri bulmak istiyorum mesela ilk txt içerisinde 40. satırdaki ahmet ile 2. txt nin 4500. satırındaki ahmet olduğunu bulacak ve 1 txt ye yazacak bulduğu sonucu ahmet diye
grep ile denemeler yapıyorum ancak txt nin boyutunu küçültmem gerekiyor ve bu iş canımı sıkıyor böl parçala vs dosyalarda herhangi bir müdehale yapmadan bunu nasıl yapabilirim.
Burada sorunuzun cevabı yazıyordu lakin daha sonra burada durmasının gereksiz olduğunu düşündüm.
abi nasıl yapacağız bilsem amatörüm :D
O zaman yapacak bir şey yok :) Sana en fazla bir dil ile dosya aç/kapa komutları ile bir şeyler yaptırılabilir oda ne kadar sağlıklı bilinmez tabi bu dosya işleminde bir çok olasılık var ve biz sadece dosyanın boyutunu biliyoruz ki 18 gb bir dosyadan bahsediyoruz o dosyası bilgisayar ile açtığında bile kitlenir :)
şimdi siz yardım etmiş mi oldunuz cidden.
Amatörsek o kadar da değil
sağol hocam
Aynı olan kelimeler mi, yoksa satırları mı? bulmak istiyorsun.
Yani Ahmet örneğinde satırın tamamı mı Ahmet olacak, her iki dosya da Ahmet kelimesinin geçtiği cümleler mi baz alınacak.
bir txt de her satırda birbirinden bağımsız ancak aynı karakter sayısında boşluk olmayan bir yazı var ve yazılar alt alta devam ediyor
diğer txt de ise daha karmaşık bir yapıya sahip cümlenin herhangi bir yerinde başında veya ortasında ahmet olabilir
ben sağ ve sol tarafta aynı satır numarasında olur veya olmayan ancak 2 txt nin herhangi bi yerinde aynı benzer olan kelimeleri bir tane ayrı bir txt ye export edecek cümleler içinde baz alınabilir yeterki aynı ahmeti bulsun
mesela
Txt1 18gb a yakın
ahmet
mehmet
cehmet
zeki
sekil
zeynep
şekil
txt2
adı ne: zeynep
nereli antalya
babası ahmet
istediğim
sonuç txt
ahmet
zeynep
Aslında küçük dosyayı tarayıp büyük olan dosya içinde aramak daha hızlı sonuç verirdi fakat verdiğin örnek tersini gerektirmiş. İçeriğini düzenleyip şunu bir dene.
İşlemciyi fazla zorlarsa sleep süresini biraz arttırırsın. Olmadı farklı yöntem denenir.
#!/bin/bash
# txt 1 'in dosya yolu
DOSYA1=~/dosya_adı
# txt 2 'nin dosya yolu
DOSYA2=~/dosya_adı
# bulunanlar listesi için oluşacak dosya
BULUNAN=~/sonuc
test -e "$BULUNAN" && rm "$BULUNAN"
while read WORD; do
if grep -q "$WORD" "$DOSYA2"; then
echo "$WORD" >> "$BULUNAN"
fi
sleep .1
done <<< $(cat "$DOSYA1" | sort -u)
Bash ile ilgili çok deneyimim yok ama ben olsam şöyle bir yol izlerdim.
Önce main.sh diye bir script dosyası yapardım,
nano main.sh
sonra 18 gb lik dosyanın satır sayısını
wc -l büyükdosya.txt
ile alırdım daha sonra
bu sayıyı 100 000 e bölerdim( yada bir milyon çünkü 18 gb text dosyası kaç satır hayal edemiyorum)
sonra bir for düngüsü içerisinde arama yapan ikinci script dosyasını & ile çağırırdım, & arka planda işlemesini sağlıyor.
ikinic script dosyamda da gerekli kelimelerle satır aralığnda arama yaptırır sonuçları bir yere yazdırırdım.