Como tubulação resultado de comando para a - opção? (Sem espaços)
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!
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