К сожалению, я думаю, что стандартный awk
допускает только один символ разделителя полей, поэтому вам придется предварительно обрабатывать данные. Вы можете сделать это с tr
, но если вы действительно хотите awk
-только решение, используйте:
pax> echo '123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010' | awk -F, '{print $1"-"$2}' | awk -F- '{print $1","$4"-"$3"-"$2}'
Это выводит:
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2010-12-01
по желанию.
Первый awk
изменяет символы ,
на -
, так что у вас есть четыре поля, разделенные одним и тем же символом (для этого бита я обычно использую tr ',' '-'
).
Второй awk
печатает их в указанном вами порядке, одновременно исправляя разделители полей.
Если вы используете реализацию awk
, которая допускает несколько символов FS
, вы можете использовать что-то вроде:
gawk -F ',|-' '{print $1","$4"-"$3"-"$2}'