Pergunta

Eu tenho esse conjunto de comandos canalizada:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'

Ele diz-me a linha anterior àquele em que primeiro encontrar asteriscos. Agora eu quero obter as linhas anteriores tubulações que a:

head -n<that previous line number>

Cabeça requer um número imediatamente após o argumento -n, sem espaços, por exemplo:

head -n4

Como posso fazer isso? Ele só não vai aceitar acrescentando

| head -n

no final do conjunto de comandos. Minhas pesquisas têm sido infrutíferos. Obrigado!

Foi útil?

Solução

Você quer back-carrapatos para substituir o valor:

head -n`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'` file.txt

Ou talvez algo semelhante em várias linhas:

LINENO=`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'`
head -n${LINENO} file.txt

Outras dicas

Por que você não apenas fazer:

awk -- '{if (!/*/) print $0; else exit}' file.txt

ou presente, que é mais rápido:

awk -- '/*/ {exit}; {print}' file.txt

Eu acho que você também pode usar xargs. Algo como:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}' | xargs -I % head -n% file.txt
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top