Parsing string token with bash

4

Eu tenho esta saída (de um comando anterior):

aaa         something
bbb         someother
ccc         blabla

Para cada linha, eu gostaria de criar um arquivo cujo nome é o primeiro token, e cujo conteúdo é o segundo token (por exemplo, para a primeira linha eu gostaria que um arquivo chamado 'aaa' que contém o texto 'algo ')

Como devo fazer isso?

    
por michelemarcon 19.12.2013 / 12:27

3 respostas

5

Uma solução simples de script awk. O segundo campo é gravado em um arquivo chamado no primeiro campo.

awk '{ print $2 > $1 }' your-file
    
por 19.12.2013 / 12:31
2

A resposta do @humanusus está correta. Para casos mais complicados em que você pode ter algo assim:

aaa         something, something more and a bit extra
bbb         someother someother more and a few more chars
ccc         blabla blah blah boloum bloum bleh

E gostaria que o nome fosse o primeiro campo e o conteúdo fosse o restante da linha, tente isto:

awk '{for(i=2; i<=NF; i++){ printf $i" " >> $1 };print "" >> $1;}' file

Ou, em Perl:

perl -ane 'open($f,">",shift(@F));print $f "@F\n"' file
    
por 19.12.2013 / 12:56
2
your_command | while read name text; do
        echo "$test" > $name
    done

Observe que a variável IFS envoronment influencia a maneira como isso é analisado (divisão de palavras) e que você precisa ter cuidado extra para não ter caracteres "especiais" nos nomes dos arquivos (e o texto).

    
por 19.12.2013 / 13:05