[Çözüldü] Grep ve ya sed kullanarak bulma ve başka bir dosyaya sıralı olarak aktarma

Başlatan apocuk, 05 Ocak 2015 - 19:04:55

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

apocuk

Arkadaslar elimde yuzlerde metin1.txt metin2.txt tarzında dosyalar var. bu dosyaların içinden
son 10 satırda "Total Energy" diye bir metni arayıpbulduktan dosya numarasını ekleyecek şekilde
başka bir metin dosyasına aktarmak istiyorum. Şuanda kullandığım geçici çözüm şöyle önce bütün belgelerin
bulunduğu klasöre giriyorum daha sonra "grep" komutuyla "Total enerji" aratıyorum karşılığındaki sayılarda çıkıyor
terminaldeki bu sonuçları libre office'e kopyalayıp sıralıyorum benim için büyük bir zaman kaybı bu konuda yardımcı
olur musunuz?
Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/

ironic

Örnek dosya ve çıktı verebilirmisin. Karışık olmuş biraz. :)

ersinkandemir

Dosyaları şu şekilde kabul ettim:

Total Energy: 42
Total Energy: 41
Total Energy: 411
Total Energy: 23
Total Energy: 4

Total Energy: 421
Total Energy: 415
Total Energy: 411222
Total Energy: 2323
Total Energy: 4321

Total Energy: 14422424
Total Energy: 232322111111111
Total Energy: 432134


Şunu kullandım:

for file in `ls *.txt`; do echo -e "\n$file\n"; cat $file | grep "Total Energy" | sort -t ":" -k 2 -n; done;


Çıktı:

1.txt
Total Energy: 4
Total Energy: 23
Total Energy: 41
Total Energy: 42
Total Energy: 411
2.txt
Total Energy: 415
Total Energy: 421
Total Energy: 2323
Total Energy: 4321
Total Energy: 411222
3.txt
Total Energy: 432134
Total Energy: 14422424
Total Energy: 232322111111111
Where there's a shell, there's a way.



apocuk

bu aramayı blgenin son 10 satırında yapsın ve dosya numarasıyla beraber enerji ifadesini çeksin,
yani tex1, tex2 tex3 ün son 10 satırından bu enerjiyi çeksin  ve şöyle yazsın
tex1 Total energy =123
tex2 Total energy =126
tex3 Total energy =129
tarzında olabilir.
Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/

ironic

for dosya in *.txt
do
  printf '%b\t%b\n' \
    "${dosya%.*}" \
    "$(tail -10 $dosya | grep -o 'Total energy=[0-9]\+')"
done

apocuk

öncelikle dosya sonu tam olarak söyle bitiyor
Total Energy:                     -12.1233520671 H
Total Mermin free energy:         -12.1233520671 H

verdiğiniz kod tam olarak çalışmadı. Bu dosyaların herbiri unpaired*.out şeklinde kayıtlı sonuç söyle
unpair10
unpair12
unpair14
unpair16
unpair18
unpair20
unpair22
unpair24
unpair26
unpair28
unpair2
unpair30
unpair32
unpair34
unpair36
unpair38
unpair40
unpair42
unpair44
unpair46
unpair48
unpair4
unpair50
unpair52
unpair54
unpair56
unpair58
unpair60
unpair6
unpair8

ben Total Energy: ifadesini buldurup sıralı bir biçimde ekrana yazdırmak istiyorum.
Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/

UykusuzBizon

for file in `ls *.txt`; do echo -e "\n$file\n"; tail -10 $file | grep "Total Energy"; done

Bu şekilde dener misiniz bir de?
Beni doyurmuyor ne para ne sistemin masalı.

apocuk

kısmen istediğim şey, ancak ben sıralı enerji değerine göre sıralayarak ekrana geçmesini istiyorum
çıktı şöyle
for file in `ls unpair*.out`; do echo -e "\n$file\n"; tail -10 $file | grep "Total Energy"; done

unpair10.out

Total Energy:                     -12.7883800178 H

unpair12.out

Total Energy:                     -12.2254583041 H

unpair14.out

Total Energy:                     -12.2629108791 H

unpair16.out

Total Energy:                     -12.3089634404 H

unpair18.out

Total Energy:                     -12.3718199745 H

unpair20.out

Total Energy:                      -0.5937358527 H

unpair22.out

Total Energy:                      -8.2136217483 H

unpair24.out

Total Energy:                     -12.8457351875 H

unpair26.out

Total Energy:                                NaN H

unpair28.out

Total Energy:                     -12.9686277350 H

unpair2.out

Total Energy:                     -12.1233520671 H

bir de çıktı şöyle olursa her sey daha kolay olur örnek olarak unpair2-->Total Energy:  2232
Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/

UykusuzBizon

Ekrana basılan Total Energy değerlerini mi sıralayacak yani?
Beni doyurmuyor ne para ne sistemin masalı.

apocuk

evet aynen öyle dosya numrasıyla beraber sıralaması işimi çok kulaylaştıracak
Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/

ironic

Alıntı yapılan: apocuk - 06 Ocak 2015 - 01:05:47

verdiğiniz kod tam olarak çalışmadı. Bu dosyaların herbiri unpaired*.out şeklinde kayıtlı sonuç söyle

Alıntı yapılan: ironic - 05 Ocak 2015 - 20:12:27
Örnek dosya ve çıktı verebilirmisin. Karışık olmuş biraz.

Her iletide farklı veriler söylenmiş. Bu gibi sorularda en son verdiğiniz bilgiyi ilk iletimizde vermeye özen gösterelim.


for dosya in unpair*.out
do
  printf "$(tail -10 $dosya | awk -v dosya="${dosya%.*}" '/Total Energy:/ {printf "%-9s --> %s %s %s %s", dosya,$1,$2,$3,$4}')\n"
done | sort -n -k 5


örnek çıktı:

unpair2   --> Total Energy: -12.9686277350 H
unpair1   --> Total Energy: -12.7883800178 H
unpair18  --> Total Energy: -12.3718199745 H
unpair16  --> Total Energy: -12.3089634404 H
unpair14  --> Total Energy: -12.2629108791 H
unpair12  --> Total Energy: -12.2254583041 H
unpair3   --> Total Energy: -12.1233520671 H
unpair4   --> Total Energy: NaN H

apocuk

Mecburiyet Esaretin Diğer Adıdır.....
http://abdurrahmanakturk.wordpress.com/