2 tane yüksek boyutlu txt dosyasında aynı olan içerikleri bulmak istiyorum

Başlatan mdikmetas, 30 Eylül 2018 - 18:40:07

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mdikmetas

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.


_newuser

Burada sorunuzun cevabı yazıyordu lakin daha sonra burada durmasının gereksiz olduğunu düşündüm.

mdikmetas


_newuser

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 :)

mdikmetas

şimdi siz yardım etmiş mi oldunuz cidden.

Amatörsek o kadar da değil

sağol hocam


mhmtkrktr

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.   

mdikmetas

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

mhmtkrktr

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)

91011

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.





Tanrı konuşmaz, şeytan fısıldar...