Yazacağım bir kabuk betiği için yardım istiyorum

Başlatan sebastian_-, 02 Haziran 2015 - 09:59:35

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

sebastian_-

arkadaşlar yazdığım script te bi noktada takıldım. Çok uğraştım ama yeni olmamdan dolayı çözemedim sanırım.

C1=48 , C2=48
N1
N2
N3
N4
N5
N6       rs 232 seri porttan aldığım veri bu şekilde ben de hattan gelen bu verinin içinden en sonuncusunu çekmek istiyorum (burada çekmem gereken değer N6 , eğer N8 olsaydı onu çekmem gerekecekti)
          bu çıktıyı almak için yazdığım parça  N=$( echo "$line" | awk '{print $2}' | grep 'N' ) . Bundan sonrasında takılıyorum işte.Yardımcı olursunuz sevinirim  :(
         

heartsmagic

Tam olarak çıktı nasıl? Dosyadan mı alıyorsun yoksa başka bir yerden mi? Alacağın şey sadece son satır mı? Eğer öyleyse:
falanca | tail -n1

Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sebastian_-

#2
sizin cevabınızdan hareketle şöyle bir deneme yaptım
     
N=$( echo "$line" | awk '{print $2}' | grep 'N' | cat >> dosya.txt )
   
   tail -n1 dosya.txt       .............................   

ama çıktı olarak   
C1=46 , C2=46


N1
N1
N2
N2
N3
N3
N4
N4
N5
N5
N6
N6
N6
N6
N6
N6

böyle bir şey aldım.yapmak istediğim şey seri porttan dönen verinin en sonuncusunu almak(yani burada N6 oluyor ) değişik şeyler denedim ancak başaramadım.yardımınız için teşekkür ederim



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Haziran 2015 - 11:33:13

ayrıca burada K=$( echo "$line" | awk '{print $2}' | grep 'N' )  şeklinde kod parçasını denediğimde aldığım çıktı

C1=46 , C2=46
N1
N2
N3
N4
N5
N6        oluyor.bu daha düzenli oluyor ancak istediğim sonucu vermiyor

heartsmagic

dosya.txt dediğin dosyanın içeriğini bir görebilir miyiz? Ortada yanlış yaptığın bir şey olmalı, zira o dosya N6 satırı ile bitiyorsa:
tail -n1 dosya.txt
komutunun başka bir sonuç vermesi pek muhtemel değil.

Kullandığın komuta baktım da öyle olmaz.
echo "$line" | awk '{print $2}' | grep 'N'  >> dosya.txt
olmalı doğrusu. Komutun ilk bölümünün doğru olduğunu varsayıyorum burada tabi. Ayrıca eğer >> kullanırsan sürekli dosyanın sonuna ekler çıktıyı. Eğer ilk verilere ihtiyacın yoksa > kullanabilirsin sıfırlanması için.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sebastian_-

hattan gelen veri
#MONI: Cell  BSIC  LAC  CellId  ARFCN    Power  C1  C2  TA  RxQual  PLMN
#MONI:  S    73  02D0   CB9B      31   -82dbm  20  20   1     0    VodaCom-SA
#MONI: N1    03  02D0   CC61      39   -85dbm  17  13
#MONI: N2    53  02D0   CB99      50   -90dbm  12   8
#MONI: N3    13  02D0   CC63      37   -91dbm  11   7
#MONI: N4    16  02D0   CB9A      38   -93dbm   9   5
#MONI: N5    22  02D0   D23C      41   -94dbm   8   4
#MONI: N6    35  02D0   0000      44   -99dbm   3  -1

OK 
şeklinde.bende buradan  N değerlerinin sonuncusunu çekmeye çalışıyorum.bunun için şöyle bi kod parçası kullandım
while read line           
do     
    
   C1=$( echo "$line" | grep 'TR' | awk '{print $8}' )
   C2=$( echo "$line" | grep 'TR' | awk '{print $9}' )
   if [ ! -z "$C1" -a  ! -z "$C2" ]; then               
      echo    C1=$C1 , C2=$C2   
      
   fi

    res=`echo "$line" | awk '{print $2}' | grep 'N' `
   if [ ! -z "$res" ]; then
      echo $res > dosya.txt
   fi

   tail -n1 dosya.txt   
done <$serial
(C1 ve C2 yi çekmeyi başardım)
ve bundan sonra terminalde aldığım çıktı
C1=38 , C2=38
N6
N1
N2
N3
N4
N5
N6
N6
N6
şeklinde oluyor.aslında yukarıda while döngüsünün içinde olmasından doalyı terminale öyle bir çıktı alıyorum.yapmam gereken bir fi ile kıyas yapıp en büyük N* değerini almak.bu arada ilginiz için teşekkür ederim.

heartsmagic

Aceleden dolayı uzun uzadıya bakamayacağım ancak tam olarak ilk gelen veriden neresini almak istediğini söylersen fikir verecek arkadaşlar olacaktır. Zira soru yavaş yavaş şekil değiştirmeye başladı gördüğün üzere :) İlk iletide daha farklı anlıyor insan istediğin şeyi.

Hattan gelen veri dediğin şey sabit mi sürekli değişiyor mu?
Eğer veri o kadarsa tam olarak oradan neyi almak istiyorsun?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sebastian_-

rs232 seri porttan bağlı modemime komut yolluyorum her komut yollamamda verdiğim tablo yeniden geliyor ve benmde her defasında yeniden almam gerekiyor.almak istediğim veri  N1,N2,N3,N4,N5,N6   ile başlayan satırlardan en sonuncusunu daha doğrusu en büyüğünü almak istiyorum. demek istediğimi tam olarak anlatamamış olmaktan dolayı özür dilerim affola  :) karşılaştırma yapıp en büyük olan N6  diycek bir kod yazmaya çalışıyorum

heartsmagic

Gelen veri budur yani:
#MONI: Cell  BSIC  LAC  CellId  ARFCN    Power  C1  C2  TA  RxQual  PLMN
#MONI:  S    73  02D0   CB9B      31   -82dbm  20  20   1     0    VodaCom-SA
#MONI: N1    03  02D0   CC61      39   -85dbm  17  13
#MONI: N2    53  02D0   CB99      50   -90dbm  12   8
#MONI: N3    13  02D0   CC63      37   -91dbm  11   7
#MONI: N4    16  02D0   CB9A      38   -93dbm   9   5
#MONI: N5    22  02D0   D23C      41   -94dbm   8   4
#MONI: N6    35  02D0   0000      44   -99dbm   3  -1

Bu arada sen de kod etiketini kullanırsan güzel olur: http://kb.ubuntu-tr.net/kodetiketi
En büyük dediğin şey N# değerleri değil mi? En büyük değer son satırda mı geliyor peki? Çok basit gibi duruyor böyle olunca :)

Diyelim ki falanca_komut ile gönderdin ve yukarıdaki çıktı geliyor sana.

falanca_komut | tail -n1 | cut -d" " -f2-d parametresinde tırnaklar arasında bir boşluk var ona göre. Yok, eğer en büyük değer son satırda gelmiyorsa yine halledilir hiç sorun değil.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.