encontra o número da linha em um arquivo que começa com um padrão da linha atual [closed]

0

Como descobrir o número da linha que começa com a data no formato aaaa-mm-dd do número da linha atual? No exemplo abaixo, eu queria descobrir que o número da linha da linha começa com 2016-10-09 gggg da minha linha atual no que é 10. Não há um padrão específico para as linhas após 10 até N + 1 e estas linhas não começarão com uma data. meu código atual é dado abaixo

lineNos=($(grep -n ERROR $file | cut -d':' -f1 | tail -3))
length=${#lineNos[@]} 
for((i=0;i<length;i++));do 
  lineNumber=${lineNos[i]}'
  endLineNo= Need to find this
 sed -n "${lineNumber},${endLineNo}p" $file
done

exemplo

    2016-10-04 mmm wewer
10  2016-10-09 ERROR ddddd
11  ttttt
12  errrrr
    ...
N   ...
N+1 2016-10-09 gggg
N+2 2016-10-10 mmm

    
por Shawn 14.10.2016 / 17:49

2 respostas

1

Esta é uma tarefa clássica para o awk, você provavelmente não precisa do 'primeiro grep':

cat myfile | awk '/pattern1/ {start=1} /pattern2/ {if (start) print NR}'

Se você realmente quiser encontrar o pattern2, mas começar a pesquisar somente a partir da linha LINE, você pode fazer:

cat myfile | awk '/pattern2/ {if (NR>'$LINE') print NR}'
    
por 14.10.2016 / 18:46
0
offset=$(grep -n 'pattern1' /path/to/input | cut -d: -f1)
awkcmd="/pattern2/ { \ = \ - $offset; print \
offset=$(grep -n 'pattern1' /path/to/input | cut -d: -f1)
awkcmd="/pattern2/ { \ = \ - $offset; print \%pre% }"
cat -n /path/to/input | awk "$awkcmd"
}" cat -n /path/to/input | awk "$awkcmd"
    
por 14.10.2016 / 18:59