Ecco una soluzione che funziona con la normale awk
(non richiede gawk
).
awk -v OFS=',' '{print substr($0,1,4), substr($0,5,2), substr($0,7,5), substr($0,12,1), substr($0,13,1)}'
Si utilizza la funzione di awk substr
per definire la posizione di inizio di ciascun campo e durata. OFS
definisce il separatore del campo di output (in questo caso una virgola).
(Nota a margine:.. Questo funziona solo se i dati di origine non ha virgole se i dati sono le virgole, allora dovete sfuggire loro di essere corretta CSV, che è oltre la portata di questa domanda)
Demo:
echo 'aasdfh9013512
ajshdj 2445df' |
awk -v OFS=',' '{print substr($0,1,4), substr($0,5,2), substr($0,7,5), substr($0,12,1), substr($0,13,1)}'
uscita:
aasd,fh,90135,1,2
ajsh,dj, 2445,d,f
Bello! Non ero a conoscenza di questa funzionalità. grande +1! Collegamento: [Lettura dati a larghezza fissa] (http://web.mit.edu/gnu/doc/html/gawk_5.html#SEC27) – fedorqui
L'argomento "FIELDWIDTHS" funziona solo per me se installo e utilizzo 'gawk '; su Ubuntu 14.04.3. – Arthur
@Arthur: in base alla [cronologia delle caratteristiche di GNU awk] (https://www.gnu.org/software/gawk/manual/html_node/Feature-History.html), FIELDWIDTHS è disponibile da gawk 2.13, ovvero a luglio 2010. – Thor