On Fri, 14 Jan 2022, TomasK wrote:

This is how I would do it with gensub in awk:

echo "col1,01/13/2022,col3" | \
awk -v FS=, -v OFS=, '{newDate=gensub(/\//,"-","g",$2); $2=newDate;
print; }'
col1,01-13-2022,col3

It works by replacing all / in col2 with -

If I would need to reorder/reformat the date string by split and print:
echo "col1,01/13/2022,col3" | \
awk -v FS=, -v OFS=, '{
 if (split($2,dateEl,"/")) {
   newDate=sprintf("%02d-%02d-%04d",dateEl[1],dateEl[2],dateEl[3]);
   $2=newDate;
 };
print; }'
col1,01-13-2022,col3

It works by splitting the col2 into dateEl array and if successful,
printing it reformatted as mm-dd-yyyy

Tomas,

Thank you. Those examples replace the 'sep' in the field. I also need to
re-order the field components (a[1]. a[2], a[3]) so they are replaced by
a[3], a[1], a[2] with the changed separator.

Reading about split() and gensub() in 'Effective AWK Programming' I see how
to make an array of the date field components, but not how to replace the
order in which they appear. More reading and trial-and-error is up next.

Regards,

Rich

Reply via email to