2016-05-10 2 views
-1

Ich habe eine Datei, die wie unten die Daten hat:Suche nach spezifischen Wert und in unsortierten Daten in Linux zählen nehmen

1,20160507057,VBATCH_20160507_00001,1000,GGG,OR1,20160507,ATP,VS12,TEST,Ver, 

2,AVAILABLE,20160507T13:23:19,ver,, 

2,USED,20160507T16:45:00,,12394301044,803123123314626251006 

1,20160507331,VBATCH_20160507_00003,1000,GGG,OR1,20160508,ATP,Pure,vour,Test, 

2,POP,20160507T16:10:27,ver,, 

2,AVAILABLE,20160507T16:17:42,ver,, 

1,20160507441,VBATCH_20160507_00003,1000,GGG,OR1,20160508,ATP,Pure,vour,Test, 

2,POP,20160507T16:10:27,ver,, 

2,AVAILABLE,20160507T16:17:42,ver,, 

Die Datensätze werden mit der ersten Zeile beginnen:

1,20160507331,VBATCH_20160507_00003,1000,GGG,OR1,20160508,ATP,Pure,vour,Test, 

Dies sind die Unterzeilen für den Datensatz oben:

2,POP,20160507T16:10:27,ver,, 

2,AVAILABLE,20160507T16:17:42,ver,, 

Also für jede Startlinie wird es einige Zeilen folgen , So meine Anforderung, die ich die folgenden Werte müssen:

Die letzte Zeile für eine Aufzeichnung, die mit den verfügbaren endet i

Beispiel all die Daten des und die zweite Spalte (erste Zeile) des Datensatzes müssen:

1,20160507331,VBATCH_20160507_00003,1000,GGG,OR1,20160508,ATP,Pure,vour,Test, 

2,POP,20160507T16:10:27,ver,, 

2,AVAILABLE,20160507T16:17:42,ver,, 

Die oben genannten Aufzeichnungen nur ich sollte berücksichtigen.

Ausgang:

20160507331 Available 
+1

Bitte verwenden Sie [Bearbeiten] diese lesbar Beitrag menschlicher zu machen! – fedorqui

+0

was Sie nicht verstehen, sagen Sie mir ... Für jede lange Zeile Datensätze habe ich einige Zeilen folgen ... In dem, wenn das Ende der Zeile hat nur VERFÜGBAR ich brauche diese Datensätze nur. – Govins

Antwort

0

-Datei erstellen: test_script.py

import sys 

with open(sys.argv[1], 'r') as f: 
    last_id = None 
    last_value = None 
    for line in f: 
     if line.startswith('1,'): 
      if last_id != None and last_value == 'AVAILABLE': 
       print last_id, last_value 
      last_id = line.split(',')[1] 
     elif line.startswith('2,'): 
      last_value = line.split(',')[1] 
    if last_id != None and last_value == 'AVAILABLE': 
     print last_id, last_value 

führen Sie dann cmd: python test_script.py your_file_path

Ich hoffe, dass es Ihnen helfen kann.

+0

kannst du mir ein komplettes Skript geben, sein Python ?? Dint bekommen Sie ... können Sie mir erklären .. Wenn ich volle Skript bekomme kann ich laufen .. – Govins

+0

Ja, es ist python.Ich habe die Antwort geändert. – KevinLu

+0

Die Ausgabe kam die ganze zweite Spalte Wert in der ersten Zeile und der zweiten Zeile und dritten Zeile zweite Spalte: Leer 20160507441 POP 20160507441 AVAILABLE aber mein 20160507057 AVAILABLE 20160507057 USED 20160507331 POP 20160507331 Anforderung war, welche erste Zeile mit verfügbarem Wert in der zweiten Zeile endet .. Ich brauche nur diese Aufzeichnungen .. 20160507331 VERFÜGBAR 20160507441 VERFÜGBAR – Govins

0
source=$1 

while read line 
do 

column_width=$(echo $line |awk -F, '{print NF}') 

if [ "$column_width" -eq 12 ];then 

grep -A2 `echo $line` $source|tail -1 |grep -q AVAILABLE 
if [ "$?" -eq 0 ];then 

id=$(echo $line |awk -F, '{print $2}') 
echo "$id AVAILABLE" 
fi 

fi 

done < $source 

Verwenden Sie es mögen:

./script FileName.txt