Manipular e salvar vários arquivos

2

Eu tenho ~ 2k arquivos que eu quero extrair 12 de 26 colunas e salvar as informações extraídas em um novo arquivo. Eu tenho feito isso para arquivos individuais usando

cat "oldfile.csv" | grep -v "=" | cut -f 1-4,9,14,15,19,21,22,24,26 > newfile.csv

Deve haver uma maneira de fazer todos os arquivos com uma série de comandos Unix.

Qualquer ajuda é muito apreciada

    
por bob cooksey 30.01.2012 / 17:40

2 respostas

4

O shell pode fazer loops:

for i in *.csv; do 
    grep -v "=" "$i" | cut -f 1-4,9,14,15,19,21,22,24,26 > "new.$i"
done

Embora, se você tiver incorporado separadores de campo em seus campos, isso será bombardeado. Mas não por causa do loop.

    
por 30.01.2012 / 17:47
1

Se você quiser fornecer arquivos específicos como argumento para um script, por exemplo, script chamado process_csv.sh

#!/bin/bash
for arg; do
    grep -v "=" "${arg}" | cut -f 1-4,9,14,15,19,21,22,24,26 > "${arg}.new"
done

Agora você pode executar este script da seguinte forma,

./process_csv.sh *.csv OR

./process_csv.sh first.csv fifth.csv seventh.csv OR

./process_csv.sh somefile1 somefile2

Antes que alguém o indique, no script acima, se você não quiser preservar os argumentos, use shift no script.

    
por 30.01.2012 / 19:00