script bash - imprima da linha N para EOF

1

Eu quero poder imprimir o número de linhas do bash como tal: Número da linha (como contado a partir do topo) - > fim do arquivo

Parece que a cauda contará apenas as linhas da parte inferior.

Alguém sabe como fazer isso? Obrigado.

Eu tentei o seguinte

# Where $1 is the file I'm reading in

# Get line number of error:
LINENUM=$( grep -n "$LAST_ERROR_DATE" $1 | egrep $LOG_THRESHOLD | grep $LAST_HOUR: | sed 's/:/ /g' | awk '{print $1}' | head -n 1 )

echo $LINENUM

# This returns 995

# Print everything from linenumber downwards
MESSAGE=$( awk 'NR >= $LINENUM' $1 )

Isso funciona quando eu manualmente coloco 995 no awk ao invés de $ LINENUM, ele não parece ler na minha variável bash. Alguma idéia?

    
por bobinabottle 27.11.2009 / 19:07

5 respostas

2

Aspas simples '' mean, "use esta string exata". Eles não substituem nomes de variáveis por seus valores. Então é por isso que você precisa escrever manualmente em 995 . Isso ajuda?

    
por 27.11.2009 / 19:42
7

Use tail -n +X filename para imprimir da Xth Line até o final do arquivo.

    
por 27.11.2009 / 19:37
1

Use sed -n 'N,$p' filename para imprimir da enésima linha até o final do arquivo.

    
por 27.11.2009 / 19:47
1
A resposta do womble é a melhor, mas para resolver o seu problema com a variável na última linha, você pode usar o recurso de passagem variável do awk:

MESSAGE=$( awk -v linenum=$LINENUM 'NR >= linenum' $1 )
    
por 27.11.2009 / 20:02
0

alternativo:

line=10
file=/path/to/file
sed -n $line,\$p $file
    
por 27.11.2009 / 19:50