Como escolher várias linhas de uma entrada e salvá-las em arquivos diferentes de uma só vez?

1

Eu preciso processar uma grande quantidade de dados do stdout, mas preciso apenas de várias linhas deles.

Digamos que eu queira acrescentar alguns dados da linha que começa com Label 3 para o arquivo F3.csv e alguns dados da linha que começa com Label 5 para o arquivo F5.csv .

Exemplo de entrada - de STDOUT

Label 1 25
Label 2 60
Label 3 70
Label 4 95
Label 5 100

Saída

Anexe 70 a F3.csv e 100 a F5.csv .

Gostaria de saber se é possível fazer isso e, se for, como.

Você conhece alguma forma?

    
por Eenoku 31.01.2017 / 22:14

2 respostas

3

Isso é muito fácil de fazer com Awk:

awk '/Label 3/ { print $3 >>"F3.csv" } /Label 5/ { print $3>>"F5.csv" }'

Isto irá acrescentar o valor das linhas que começam com Label 3 e Label 5 no arquivo F3.csv e F5.csv correspondentemente.

Isso também pode ser escrito de maneira um pouco mais compacta:

awk '/Label 3|Label 5/ { print $3 >> "F"$2".csv"}'

usando um fato de que o nome do arquivo de destino pode ser deduzido do sufixo da etiqueta

(obrigado @don_crissti!)

    
por 31.01.2017 / 22:40
2

tente isso -

#sed -e '/Label\ 3/w F3.csv' -e '/Label\ 5/w F5.csv' sed.txt
Label 1 25
Label 2 60
Label 3 70
Label 4 95
Label 5 100
#head F?.csv
==> F3.csv <==
Label 3 70

==> F5.csv <==
Label 5 100
    
por 31.01.2017 / 22:21