Como truncar apenas o tamanho da coluna?

2

ENTRADA:

a@notebook:~$ cat in.csv
'XYZ843141'^'ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFREQTzKb   aSFfdsaADSFSA  adsFdsa34 34 ASFfsas  saftrzj etrzrasdfasffasf safs'^'foooobaaar'^'ZZZ'^'..... and so on, further columns

OUTPUT:

a@notebook:~$ cat in.csv | SOMEMAGIC
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns

Minha pergunta : If:

'^'

é o separador, então como pode SOMEMAGIC (um awk / sed ??) truncar a segunda coluna para determinado comprimento? Exemplo: 20 caracteres no máximo, a partir disso:

ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF

para isso:

ASDFSAFXYVFSHGDSDg s

e preserve todas as outras coisas: \

    
por evachristine 01.07.2014 / 15:22

3 respostas

4
> awk -v OFS="'^'" -F"'\\^'" '{if(length($2)>20) $2=substr($2,1,20); print;}' file
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns
    
por 01.07.2014 / 15:37
2

Aqui está um exemplo simples de sed para obter apenas 20 caracteres da nossa string:

$ str = "ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF"

$ echo $str | sed -e 's/^\(.\{20\}\).*//'
ASDFSAFXYVFSHGDSDg s

Ou com o comando cut :

$ echo $str | cut -c 1-20

Espero que isso ajude

EDITAR: Que tal isso:

$ echo $str | awk -F "^" '{print $1,$2}'
'XYZ843141' 'ASDFSAFXYVFSHGDSDg s'
    
por 01.07.2014 / 15:28
0

Você pode tentar isto:

paste -d^ <(cut -f1 -d^ in.csv) \
          <(cut -f2 -d^ in.csv | sed -e 's/^\(.\{21\}\).*/'\''/')\
          <(cut -f3- -d^ in.csv)

No entanto, isso falhará se houver ^ em alguns dos campos.

    
por 01.07.2014 / 15:39

Tags