Como comparar (usando maior que e menor que símbolos) strings usando awk [duplicate]

0

Este é o meu arquivo de entrada:

PA43171-7,1,3,/vobs/atlas-idc/src/utils/logger/IDCLogger/IDC.cpp,48,12:01:16.086‌​.660, Valid Sensor Reading,Date = 08-19-2014 , Time = 12:01:16 Voltage Sensor=11 , V$ $=11 , Voltage Sensor Value=9.927417 , Min=9.450000 , Max=11.550000 

Eu preciso comparar o valor do sensor de tensão, o valor mínimo e máximo. (Min maior que Valor do Sensor de Voltagem maior que Max)

Estou esperando a saída abaixo do meu arquivo de entrada:

PA43171-7 Date = 08-19-2014 , Time = 12:01:16 Voltage Sensor Value=9.927417 , Min=9.450000 , Max=11.550000 
    
por Albert Lévay 01.04.2016 / 09:27

1 resposta

1

tente

 awk -F, '{ printf "%s %s, %s %s %s µs\n",$1,$8,substr($9,1,15),$11,$12,$13 ;}' file

Eu obtenho posição de campo usando

 awk -F, '{ for (i=1;i<=NF;i++) printf "%2d: %s\n",i,$i;}' a
 1: PA43171-7
 2: 1
 3: 3
 4: /vobs/atlas-idc/src/utils/logger/IDCLogger/IDC.cpp
 5: 48
 6: 12:01:16.086‌​.660
 7:  Valid Sensor Reading
 8: Date = 08-19-2014
 9:  Time = 12:01:16 Voltage Sensor=11
10:  V$ $=11
11:  Voltage Sensor Value=9.927417
12:  Min=9.450000
13:  Max=11.550000

Edit: (Eu vejo problema com dupplicate, aqui não branco arround = )

1- obter índice de campo

(somente para a primeira linha, eu suponho que todas as linhas sejam parecidas)

awk 'BEGIN { FS="[,=]" } NR == 1 { for (i=1;i<=NF;i++) printf "%2d: %s\n",i,$i;}' a
 1: PA43171-7
 2: 1
 3: 3
 4: /vobs/atlas-idc/src/utils/logger/IDCLogger/IDC.cpp
 5: 48
 6: 12:01:16.086‌​.660
 7:  Valid Sensor Reading
 8: Date
 9:  08-19-2014
10:  Time
11:  12:01:16 Voltage Sensor
12: 11
13:  V$ $
14: 11
15:  Voltage Sensor Value
16: 9.927417
17:  Min
18: 9.450000
19:  Max
20: 11.550000

2- teste real (de acordo com Como comparar as strings usando < (maior que o símbolo) para o registro)

awk 'BEGIN { FS="[,=]" }
    $16 < $18 { print "too low:%s\n",$0 }
    $16 > $20 { print "too high:%s\n",$0 } ' a
    
por 01.04.2016 / 09:57

Tags