2017-10-19 20 views
0

J'essaie de lire uniquement les coordonnées de ma sortie gps-programm.Sélection de la valeur après une colonne dans une sortie de commande csv

Pour obtenir le résultat ci-dessous, je l'ai utilisé la commande suivante

minicom -b 9600 -o -D /dev/ttyAMA0 -C /home/logreader/logs/log.txt 

Je pense que je cherche est la commande grep, je ne sais pas comment l'utiliser sur mon fichier texte. Ci-dessous est sortie de bash console. Je ne veux que les valeurs sous-jacentes $GNGLL

$GLGSV,3,2,09,76,20,279,13,77,14,337,29,84,21,102,29,85,67,056,20*63 
$GLGSV,3,3,09,86,39,312,29*53 
$GNGLL,4723.67569,N,00803.07350,E,091749.00,A,D*73 
$GNRMC,091750.00,A,4723.67574,N,00803.07351,E,0.065,,191017,,,D*63 
$GNVTG,,T,,M,0.065,N,0.120,K,D*38 
$GNGGA,091750.00,4723.67574,N,00803.07351,E,2,12,0.67,382.9,M,47.3,M,,0000*47 
$GNGSA,A,3,08,01,16,11,27,10,22,32,28,,,,1.18,0.67,0.97*1A 
$GNGSA,A,3,76,85,71,86,69,70,77,84,,,,,1.18,0.67,0.97*1B 
$GPGSV,4,1,15,01,19,266,27,04,49,143,39,08,74,293,29,10,58,068,16*7E 
$GPGSV,4,2,15,11,30,284,25,14,10,140,,16,19,190,27,18,28,052,*76 
$GPGSV,4,3,15,21,04,082,23,22,10,215,30,27,65,138,27,28,09,329,27*75 
$GPGSV,4,4,15,30,01,303,,32,20,127,49,33,31,211,44*45 
$GLGSV,3,1,09,69,32,038,19,70,61,124,23,71,23,178,19,75,05,235,21*64 
$GLGSV,3,2,09,76,20,279,15,77,14,337,29,84,21,102,29,85,67,056,21*64 
$GLGSV,3,3,09,86,39,312,29*53 
$GNGLL,4723.67574,N,00803.07351,E,091750.00,A,D*76 
$GNRMC,091751.00,A,4723.67576,N,00803.07351,E,0.026,,191017,,,D*67 
$GNVTG,,T,,M,0.026,N,0.048,K,D*30 
$GNGGA,091751.00,4723.67576,N,00803.07351,E,2,12,0.67,383.1,M,47.3,M,,0000*4D 
$GNGSA,A,3,08,01,16,11,27,10,22,32,28,,,,1.18,0.67,0.97*1A 
$GNGSA,A,3,76,85,71,86,69,70,77,84,,,,,1.18,0.67,0.97*1B 
$GPGSV,4,1,15,01,19,266,27,04,49,143,39,08,74,293,29,10,58,068,17*7F 
$GPGSV,4,2,15,11,30,284,25,14,10,140,,16,19,190,27,18,28,052,18*7F 
$GPGSV,4,3,15,21,04,082,24,22,10,215,30,27,65,138,27,28,09,329,28*7D 
$GPGSV,4,4,15,30,01,303,,32,20,127,49,33,31,211,44*45 
$GLGSV,3,1,09,69,32,038,19,70,61,124,24,71,23,178,19,75,05,235,21*63 
$GLGSV,3,2,09,76,20,279,16,77,14,337,29,84,21,102,30,85,67,056,21*6F 
$GLGSV,3,3,09,86,39,312,29*53 
$GNGLL,4723.67576,N,00803.07351,E,091751.00,A,D*75 
$GNRMC,091752.00,A,4723.67577,N,00803.07350,E,0.010,,191017,,,D*61 
$GNVTG,,T,,M,0.010,N,0.018,K,D*30 
$GNGGA,091752.00,4723.67577,N,00803.07350,E,2,12,0.67,383.3,M,47.3,M,,0000*4C 
$GNGSA,A,3,08,01,16,11,27,10,22,32,28,,,,1.18,0.67,0.97*1A 
$GNGSA,A,3,76,85,71,86,69,70,77,84,,,,,1.18,0.67,0.97*1B 
$GPGSV,4,1,15,01,19,266,27,04,49,143,40,08,74,293,29,10,58,068,18*7E 
$GPGSV,4,2,15,11,30,284,25,14,10,140,,16,19,190,27,18,28,052,16*71 
$GPGSV,4,3,15,21,04,082,24,22,10,215,30,27,65,138,28,28,09,329,28*72 
$GPGSV,4,4,15,30,01,303,,32,20,127,49,33,31,211,44*45 
$GLGSV,3,1,09,69,32,038,19,70,61,124,25,71,23,178,19,75,05,235,21*62 
$GLGSV,3,2,09,76,20,279,17,77,14,337,29,84,21,102,30,85,67,056,21*6E 
$GLGSV,3,3,09,86,39,312,29*53 
$GNGLL,4723.67577,N,00803.07350,E,091752.00,A,D*76 
$GNRMC,091753.00,A,4723.67578,N,00803.07348,E,0.043,,191017,,,D*60 
$GNVTG,,T,,M,0.043,N,0.079,K,D*31 
$GNGGA,091753.00,4723.67578,N,00803.07348,E,2,12,0.67,383.5,M,47.3,M,,0000*4D 
$GNGSA,A,3,08,01,16,11,27,10,22,32,28,,,,1.18,0.67,0.97*1A 
$GNGSA,A,3,76,85,71,86,69,70,77,84,,,,,1.18,0.67,0.97*1B 
$GPGSV,4,1,15,01,19,266,26,04,49,143,40,08,74,293,29,10,58,068,19*7E 
$GPGSV,4,2,15,11,30,284,24,14,10,140,,16,19,190,27,18,28,052,15*73 
$GPGSV,4,3,15,21,04,082,23,22,10,215,31,27,65,138,28,28,09,329,27*7B 
$GPGSV,4,4,15,30,01,303,,32,20,127,49,33,31,211,43*42 
$GLGSV,3,1,09,69,32,038,19,70,61,124,25,71,23,178,19,75,05,235,21*62 
+0

@Inian ne fonctionne pas, il me donne la possibilité d'entrer quelque chose. racine @ raspberrypi:/home/logreader/logs # minicom -b 9600 -o -D/dev/ttyAMA0 -C /home/logreader/logs/log.txt | awk 'BEGIN {FS = OFS = ","} $ 1 =' $ GLGSV '{pour (i = 2; i <= NF; i ++) imprimer $ i} > > > –

+0

@Inian Comme ceci? 'minicom -b 9600 -o -D/dev/ttyAMA0 -C /home/logreader/logs/log.txt | awk 'BEGIN {FS = OFS = ","} $ 1 =' $ GLGSV '{pour (i = 2; i <= NF; i ++) imprimer $ i}' ' –

Répondre

0

Vous pouvez utiliser grep si vous voulez avec une expression régulière. Cela fonctionnerait pour vous:

minicom -b 9600 -o -D /dev/ttyAMA0 -C /home/logreader/logs/log.txt | grep -oP '.*(?:\$GNGLL,)\K([^\n\r]*)' 
+0

Merci! C'est ce que je cherchais! est-il un moyen d'enlever le ', A, D * 75' à la fin? –

+0

Oui c'est très facile! Vous avez juste besoin d'ajouter un lookahead positif à la fin! Essayez avec ceci: '. * (?: \ $ GNGLL,) \ K ([^ \ n \ r] *) (? =, A. *)' – m33n