Eu tenho um arquivo de dados feio que preciso limpar -
Date User Name Item Id Title Quantity Price Total Amount
1/1/2015 name1 461064485 Description One Has Spaces 1 $899.99 $899.99
Real Name 1 Real Address With Spaces Location, Real 55555 555-555-5555
1/2/2015 name2 has spaces 461222501 Description still has spaces 1 $229.99 $229.99
Real Name Real Address 2 w spaces Real Location2 55556 555-555-5556
Isso funciona melhor até agora:
awk -F " +" '/^[0-9]\/*[0-9]\// {print $1, $3, $5, $6, $7}' Table.txt > x.txt
mas é suspenso, o nome de usuário fica muito longo e fica a apenas um espaço do ID do item. Nesse caso, $ 2 se torna o desejado $ 2 + $ 3.
Eu tentei dividir e imprimir como
awk -F " +" '/^[0-9]*\/*[0-9]\// {if ( length ($2) >= 15 ) brokenfield=$2 split(brokenfield,subfields," "); print $1, subfields[-1], $4, $5, $6} {if (length ($2) < 15) print $1, $3, $5, $6, $7}' Table.txt > x.txt
que funciona, mas processa tudo ou o processa duas vezes; ou
awk -F " +" '/^[0-9]\/*[0-9]\// {if ( length ($2) >= 15 ) brokenfield=$2 split(brokenfield,subfields," ") print "$1, subfields[-1], $4, $5, $6"; else print "$1, $3, $5, $6, $7" }' Table.txt > x.txt
mas não consigo obter a sintaxe correta sem processá-la duas vezes, processando todas as linhas (não sei por que, já que o algoritmo de busca deve processar apenas linhas iniciadas por datas) ou recebendo erros sobre impressão ou minha declaração .
Eu planejo fazer o upgrade para um printf, então também fixei as larguras das colunas, mas não consigo corrigir minha sintaxe.
Saída desejada (idealmente com larguras de colunas fixas):
1/1/2015 461064485 1 $899.99 $899.99
1/2/2015 461222501 1 $229.99 $229.99