Dúvida com o comando CAT [RESOLVIDO]

1. Dúvida com o comando CAT [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 01/04/2009 - 04:14h

Olá,

alguém sabe me dizer como seria um comando, se é que é possível, para listar o conteúdo de um arquivo de texto com o comando CAT, só que listar apenas a partir de uma determinada linha que possui uma determinada palavra?

por exemplo, se eu tiver um arquivo chamado PALAVRAS.txt com o seguinte conteúdo:

bola
balão
bacia
bolo

eu usaria esse comando para listar o conteúdo de PALAVRAS.txt, mas apenas a partir da palavra balão. Mesmo que eu adicionasse outras palavras depois ou mudasse "balão" de lugar, esse comando só listaria a partir de balão.

será que é possível? alguém poderia me ajudar?

flw!


  


2. MELHOR RESPOSTA

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 01/04/2009 - 14:21h

agora ficou facil...
fazendo em uma unica linha, sem script...
cat palavras.txt | wc -l | grep -A `awk '{print $1}'` "balão" palavras.txt

3. Re: Dúvida com o comando CAT [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 01/04/2009 - 09:05h

Você pode tentar com o sed assim:

sed -n '/padrão/,$p' < arquivo


4. Re: Dúvida com o comando CAT [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 01/04/2009 - 12:19h

SMarcell,

Esse comando que você disse, mostra uma única linha. Eu queria tipo listar uma linha determinada pela palavra, como voce fez, e alem disso listar as outras linhas posteriores a essa palavra.

Pelo menos com esse seu comando eu ja posso conseguir pensar em algo

obrigado =)


5. Re: Dúvida com o comando CAT [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/04/2009 - 13:53h

bola
balão
bacia
bolo


-----

#!/bin/bash
VAR=$(wc -l $2)
grep -A $VAR $1 $2 | egrep -v '#'

-----

Onde
$1 - padrão
$2 - caminho do arquivo

E neste arquivo você poderá inserir comentários graças ao pipe egrep -v '#'


6. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 01/04/2009 - 14:14h

cara...
acho que pra isso tem que fazer um scriptzinho... não sei se tem como fazer uma unica linha de comando...
seria algo assim

#!/bin/bash
linhaPal=0
total=0
linhaPal=`cat -n palavras.txt | grep "balão" | awk '{ print $1 }'
total = `cat palavras.txt | wc -l`
exibe=`expr $total - $linhaPal + 1`
tail -n "$exibe" palavras.txt

PS: Achei o script de cima interessante mas aqui não funcionou... to dando uma olhada ver oq ta errado.


7. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 01/04/2009 - 14:17h

aqui o problema do script acima era que precisa pegar o total de uma coluna (o wc -l gera 2 colunas)

VAR=$(wc -l $2 | awk '{print $1}')

deve ter algum jeito melhor....


8. Re: Dúvida com o comando CAT [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 01/04/2009 - 14:40h

Muito obrigado stremer! Era isso mesmo!
Perfeito e de forma bem simples =]
Valeuzão ae!

Obrigado a todos!


9. Re: Dúvida com o comando CAT [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 01/04/2009 - 15:16h

stremer,

voce poderia me expliar um pouco sobre o que acontece com esse seu comando?

cat palavras.txt | wc -l | grep -A `awk '{print $1}'` "balão" palavras.txt

Usei o man, mas nao entendi muita coisa.

eu sei pra que serve o cat, entendi o wc -l, sei pra serve o grep, o -A, o que eu nao etendi foi esse:

`awk '{print $1}'`

=/

pode me dar uma luz so pra eu nao ficar boiando?





10. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 01/04/2009 - 18:11h

Quando você coloca algum comando entre crases, no caso o comando `awk {'print$1}'}`, ele vai executar este comando primeiro para depois executar o comando principal no caso o grep -A.
Como precisamos passar para o grep o total de linhas do arquivo (que foi descoberto anteriormente pelo wc -l), somente estou utilizando desta tecnica para imprimir o valor descoberto anteriormente neste próximo comando. No caso do awk, ele considera o $1, $2, $3, etc... da mesma forma que o shell script, ou seja, a cada espaçamento, um parâmetro, como se você estivesse chamando um programa, passando como parâmetro a quantidade de linhas (wc -l).

Entendeu?


11. Re: Dúvida com o comando CAT [RESOLVIDO]

Xerxes
xerxeslins

(usa openSUSE)

Enviado em 02/04/2009 - 00:16h

stremer,

obrigado.

acho que etendi sim agora.

`awk {'print$1}'}`

é um parâmetro que completa o grep -A fornecendo o total de linhas do arquivo. para dizer assim: "mostre TODAS AS LINHAS DO ARQUIVO LISTA.TXT, mas só as linhas a partir da palavra "balão".

entao essa parte em capslock que eu coloquei na frase seria a função dessa parte entre crases.

foi isso o que eu entendi


12. sei que o topico esta esclarecido...

M4iir1c10
m4iir1c10

(usa Arch Linux)

Enviado em 02/04/2009 - 00:45h

Porem so pra refrescar as ideias de quem possa ler e nao entender:

cat palavras.txt | wc -l | grep -A `awk '{print $1}'` "balão" palavras.txt

cat palavras.txt = Me mostre todo o conteudo do arquivo palavras.txt
wc -l = conte as linhas
grep -A "balao" = me mostre somente as linhas com a palavra balao e a linha onde elas se encontram.
awk '{print $1}' = mostre somente os primeiros valores do comando anterior
| = joga o resultado do comando anterior para o proximo comando.





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts