O jeito Shell Script de resolver problemas — Parte 3

→ Parte1, Parte 2

Problema: fatiar um arquivão em pedaços menores, com N linhas cada.

Solução fácil.
Um único comando.
split -l N arquivo.txt

Não conhece o comando?
Não conhece esta opção específica?
Problemas², vai ter que inventar.

sed, sempre ele.
sed que gera sed: avançado e poderoso.
paste + seq + seq? Quem diria!

Sem arquivos temporários.
Sem loop.
Sem design patterns.

Com mágica.
Com diversão.
Com salada de frutas.

Spoiler: a Mog dá “oi” tímido no final ;)

Resumo dos comandos:

  • sed — edita linhas
  • seq — sequência de números
  • split — fatia arquivos
  • paste — junta colunas

Histórico:

### split
seq 20
seq 20 > 20.txt
split -l 5 20.txt
ls
cat xaa
cat xab
rm x*
ls

### sed w
sed -n '1,5 p' 20.txt
sed -n '4,11 p' 20.txt
sed -n '4,11 w foo.txt' 20.txt
ls
cat foo.txt
sed -n '1,5 w foo1.txt' 20.txt
sed -n '6,10 w foo2.txt' 20.txt
cat foo2.txt

### paste + seq
seq 5
seq 1 20
seq 1 5 20
seq 5 5 20
seq 1 5 20 > a1
seq 5 5 20 > a2
paste a1 a2
paste a1 <(seq 5 5 20)
paste <(seq 1 5 20) <(seq 5 5 20)
rm a?

### sed constrói um script sed
paste -d , <(seq 1 5 20) <(seq 5 5 20)
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w foo.txt/'
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w foo-&.txt/'
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/'
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/ ; s/,/-/2'

### aplicação do script sed
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/ ; s/,/-/2' > foo.sed
cat foo.sed
ls
ls
sed -n -f foo.sed 20.txt
ls
cat linhas-1-5.txt
cat linhas-16-20.txt<

### recapitulando: estes são os dois comandos
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/ ; s/,/-/2' > foo.sed
sed -n -f foo.sed 20.txt

### agora num único comando, sem precisar de foo.sed
rm foo.sed
rm linhas-*
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/ ; s/,/-/2' | sed -n -f - 20.txt
paste -d , <(seq 1 5 20) <(seq 5 5 20) | sed 's/.*/& w linhas-&.txt/ ; s/,/-/2' | sed -n -f /dev/stdin 20.txt
ls
cat linhas-6-10.txt
Related Posts Plugin for WordPress, Blogger...
Publicado em por Aurelio Jargas e arquivado em Nerd, Vídeo-aula (screencast).

5 respostas a O jeito Shell Script de resolver problemas — Parte 3

  1. Beto disse:

    Jedi Shell !!!

  2. Edson disse:

    Oi Mog ^^

  3. Anonymous disse:

    Ótimo vídeo, Aurélio! Parabéns!

    Gostaria de saber, se possível:

    1) Qual o tipo e tamanho de fonte que você usa no seu shell do Mac;

    2) Como você fez para mudar o prompt do shell para aquela seta? :)

    []‘s

  4. Ielton disse:

    Aurelio, sumido!

    Estou sempre acompanhando sua atualizações, e o livro do sed?
    Respondi meu email quando puder, um abraço!

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>