Eu tenho um CSV onde preciso reformatar o conteúdo de uma única coluna. O problema é que cada célula tem comprimentos completamente diferentes para reformatar.
A coluna atual se parece com (são duas linhas de uma única coluna):
Foo*foo*foo*1970,1980+Bar*bar*bar*1970
Foobar*Foobar*foobarbar*1970,1975,1980
O resultado deve ser semelhante a (ainda duas linhas uma coluna)
Foo*foo*foo*1970+Foo*foo*foo*1980+Bar*bar*bar*1970
Foobar*Foobar*foobarbar*1970+Foobar*Foobar*foobarbar*1975+Foobar*Foobar*foobarbar*1980
isso é o que estou tentando fazer
#!/bin/bash
cat foocol | \
awk -F'+' \
'{for i in NF print $i}' \
| awk -F'*' \
'{$Foo=$1"*"$2"*"$3"*" print $4}' \
\
| awk -v Foo=$Foo -F',' \
'{for j in NF do \
print Foo""$j"+" }' \
> newcol
A ideia é iterar sobre os múltiplos dados delimitados por '+', enquanto os três primeiros valores delimitados por '*' devem ser agrupados para cada ',' ano delimitado, com um '+' entre eles
Mas estou recebendo erros de sintaxe em todos os lugares.
Obrigado
$ awk --re-interval -F, -v OFS=+ '{match($1,/([^*]*\*){3}/);
prefix=substr($0,RSTART,RLENGTH);
for(i=2;i<=NF;i++) $i=prefix $i }1' file
Foo*foo*foo*1970+Foo*foo*foo*1980+Bar*bar*bar*1970
Foobar*Foobar*foobarbar*1970+Foobar*Foobar*foobarbar*1975+Foobar*Foobar*foobarbar*1980
talvez adicionar validação com if(match(...
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras