remove novas linhas

0

Minha entrada é um arquivo csv como este:

10,"Special Projects,bangaram",0,,0
10,"Statutory/ Internal Audit , MO reporting (incl Excel Spreadsheet uploadation)
",     bangaram,0,,0
10,"Complience with SVCCL",     bangaram,       0,,     0
10,     "Release of incentives / commission to all channel partners.
",      bangaram,       0,,     0
10,"Timely processing of sales orders to channel partners",     bangaram,       0,,     0
10,"    Balance sheet Reviwe", bangaram,        0,,     0
10,"    Ensuring Critical Reconciliation on monthly basis. (IN-GL)",    bangaram,       0,,     0
10,     "Timely & accurate closure of Accounts.
",      bangaram,       0,,     0
11,"    Opex Spend on communication activites", bangaram,       0,,     0
11,"    Opex Spend on communication activites", bangaram        ,0,,    0

Eu preciso de uma saída assim:

10,"Special Projects,bangaram",0,,0
10,"Statutory/ Internal Audit , MO reporting (incl Excel Spreadsheet uploadation)",     bangaram,0,,0
10,"Complience with SVCCL",     bangaram,       0,,     0
10,     "Release of incentives / commission to all channel partners.",      bangaram,       0,,     0
10,"Timely processing of sales orders to channel partners",     bangaram,       0,,     0
10,"    Balance sheet Reviwe", bangaram,        0,,     0
10,"    Ensuring Critical Reconciliation on monthly basis. (IN-GL)",    bangaram,       0,,     0
10,     "Timely & accurate closure of Accounts.",      bangaram,       0,,     0
11,"    Opex Spend on communication activites", bangaram,       0,,     0
11,"    Opex Spend on communication activites", bangaram        ,0,,    0

Sempre que houver uma nova linha que será excluída e, em seguida, adicionada à linha anterior. Por favor, escreva o shell script sobre isso.

    
por suneelbabu.etl 02.03.2014 / 14:22

3 respostas

2

Supondo que os espaços entre , e " são erros de digitação (se não, então o " está incorporado em uma cadeia começando com um caractere de espaço e seu arquivo CVS não padrão), você pode fazer o seguinte Python:

import sys
import csv

out = csv.writer(sys.stdout, delimiter=',', quotechar='"',
                 quoting=csv.QUOTE_NONNUMERIC)
with open(sys.argv[1]) as csv_file:
    for line in csv.reader(csv_file, delimiter=',', quotechar='"'):
        out.writerow([x.replace('\n', '') for x in line])

Isso também manipulará corretamente as aspas duplas quando elas ocorrerem em uma cadeia com aspas duplas, como " abc""def " , que obterá a string abc"def

Observe que o módulo csv do Python, por padrão, remove aspas redundantes da saída. A última linha, por exemplo será

11,    Opex Spend on communication activites, bangaram        ,0,,    0

como em um arquivo CSV apropriado, nenhuma citação é necessária em torno do segundo elemento (ele não contém o caractere de citação nem contém uma nova linha).

    
por 02.03.2014 / 15:14
1

Como outros já disseram, seu exemplo é difícil de entender e você realmente deve usar um analisador adequado. Para o exemplo específico que você mostrou, isso funcionará, mas quebrará em casos mais complexos, apenas removerá todas as novas linhas ( \n ) que vierem antes de um " :

perl -000pe 's/\n"/"/g' file.csv 
    
por 02.03.2014 / 17:02
0

Com o GNU awk :

awk -vRS=\" 'NR%2 == 0 {gsub("\n","")}; {ORS=RT; print}'
    
por 02.03.2014 / 18:04