awk + gsub + como trabalhar com todos os tipos de caracteres

3

O seguinte destino de comando awk é remover espaços e cotações desnecessárias do arquivo CSV e apenas de palavras únicas entre separadores

awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"([[:alnum:]]+)"/,"\1","g")}1' file.csv

exemplo: (antes)

1,"1.0348    54 35.5",""45356",""4"""""35,"578 "

exemplo: (depois)

1,"1.0348    54 35.5","45356,"4""""35,578

o problema é que awk não consegue lidar quando os caracteres não são alfanuméricos

exemplo

1,"  jde7@&^%  "," &^!@  ",)(*&^," (*^%%^&*( "

minha meta é trabalhar com todos os tipos de caracteres não alfanuméricos e alfanuméricos

como

(  A-Z , !@#$%^&&**( , 1-9 , etc )

Acho que preciso substituir o [[: alnum:]] por outra sintaxe.

O que eu preciso mudar na minha sintaxe awk para suportar todos os tipos de caracteres?

    
por maihabunash 29.07.2014 / 11:21

1 resposta

3

A classe de caracteres [[:alnum:]] representa caracteres alfabéticos e numéricos, você pode usar

[^[:alnum:]] para não alfanumérico, por isso, para o seu objetivo:

my target is to work with all kind of characters non alpha numeric and alpha numeric

você pode usar esta expressão [[:alnum:]] | [^[:alnum:]]

, então o comando awk será algo assim:

awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"(([[:alnum:]]|[^[:alnum:]])+)"/,"\1","g")}1' file.csv
    
por 29.07.2014 / 11:35

Tags