usando sed em loop

0

Eu tenho arquivos .txt com a seguinte estrutura:

20170515000650883,208,-32,-896,stand
20170515000651883,336,96,-928,stand
20170515000652982,368,64,-896,stand
20170515000653982,256,-48,-816,lie
20170515000654982,368,48,-832,lie
20170515000655982,15081,32,-688,lie
20170515000656982,15081,48,-864,lie
20170515000657983,15081,112,-1072,lie
20170515000658983,15081,-32,-992,lie
20170515000659983,15081,-48,-1072,lie
20170515000700983,15081,-32,-880,lie
20170515000701983,15081,16,-832,stand
20170515000702983,15081,-48,-720,stand
20170515000703983,15081,0,-896,stand
20170515000704983,15081,112,-880,lie
20170515000705983,15081,-48,-1072,lie
...

Meu objetivo é pesquisar por lie eventos representados na última coluna. Isso eu percebi com

sed -n '13,$s/lie/&/p' $subj > $SUBJECTS_DIR/temp.txt

onde iniciei a pesquisa na linha 13 e salvei todas as linhas com 'lie' em meu arquivo temporário. Mas é possível coletar dados durante o comando sed? A primeira coluna contém um registro de data e hora: portanto, quando lie = TRUE, quero coletar o valor de column_1; Além disso, quando a última mentira dessa sequência (no total, 8 'lie' ocorre, o valor correspondente de column_1 é necessário para calcular a diferença de tempo. A pesquisa deve continuar até que o arquivo termine. Alguém tem alguma idéia de como coletar essas informações durante o sed?

    
por osteocyt 13.07.2017 / 13:15

2 respostas

0

Você pode usar o awk para isso.

awk -F"," '/lie/{a[++i>2?2:i]=$1}END{print a[2] - a[1] }' input .txt

O comando awk armazenará o primeiro e o mais recente timestamp que corresponde a "lie" em um array. Uma vez que o arquivo foi lido, o awk irá subtrair a primeira partida da última partida.

    
por 13.07.2017 / 14:46
0

Não está claro para mim o que é "diferença de horário", mas a primeira coluna com a "mentira" pode ser simplesmente expandida com este comando:

cat data.txt | grep lie | sed "s/,.*,lie//g"

grep descarta todas as linhas sem "mentir" e sed exclui todas, exceto a primeira coluna.

Então, você pode f.e. transformá-lo em array e trabalhar com números necessários no bash

    
por 13.07.2017 / 14:25