Преобразование формата даты с использованием sed или awk - PullRequest
0 голосов
/ 26 декабря 2018

Я новичок в Unix и ищу ответ на приведенную ниже проблему.

У меня есть файл, разделенный точкой с запятой, как показано ниже

Frank;01012019;01012020;woodcrest wack st
Mark;01012019;01012020;Annunciation st
Fred;01022019;01012020;Baker st

Формат даты во входных данныхфайл в формате ДДММГГГГ.Мне нужно преобразовать дату в формат ГГГГММДД, как показано ниже.

Ожидаемый результат:

Frank;20190101;20200101;woodcrest wack st
Mark;20190101;20200101;Annunciation st
Fred;20190201;20200101;Baker st

Пожалуйста, предложите мне ответы с помощью команды sed или awk.

Ответы [ 5 ]

0 голосов
/ 30 декабря 2018

с Perl

$ cat sadhiya.txt
Frank;01012019;01012020;woodcrest wack st
Mark;01012019;01012020;Annunciation st
Fred;01022019;01012020;Baker st

$ perl -F";" -lane ' s/(.{2})(.{2})(.{4})/$3$2$1/g for @F[1..2]; print join(";",@F) ' sadhiya.txt
Frank;20190101;20200101;woodcrest wack st
Mark;20190101;20200101;Annunciation st
Fred;20190201;20200101;Baker st
0 голосов
/ 27 декабря 2018

С sed:

sed -E -n 's/(.*);([0-9]{2})([0-9]{2})([0-9]{4});([0-9]{2})([0-9]{2})([0-9]{4});(.*)/\1;\4\3\2;\7\6\5;\8/p' file_name
0 голосов
/ 26 декабря 2018

С GNU sed:

sed -r 's/;([0-9]{2})([0-9]{2})([0-9]{4})/;\3\2\1/g' file.csv

Выход:

Frank;20190101;20200101;woodcrest wack st
Mark;20190101;20200101;Annunciation st
Fred;20190201;20200101;Baker st
0 голосов
/ 26 декабря 2018
sed -E 's/([0-9]{2})([0-9]{2})([0-9]{4});/\3\2\1;/g' data
#=> Frank;20190101;20200101;woodcrest wack st
#=> Mark;20190101;20200101;Annunciation st
#=> Fred;20190201;20200101;Baker st

\1, \2 и \3 представляют каждое пойманное в скобках содержимое, то есть DD, MM и YYYY здесь.s должен заменить в sed.
Наконец, g означает заменить все вхождения, без него sed будет заменять только первую группу.

Если ввод отформатирован и стабилен, как высказал, тогда sed на самом деле легче сделать это.
ps: -E для extended regular expressions, он работает как на Unix Sed, так и на GNU SED.
Это избавляет вас от необходимости бежать (){}.

0 голосов
/ 26 декабря 2018
awk -F';' '{print $1";"substr($2, 5, 4)""substr($2, 1, 2)""substr($2, 0, 2)";"substr($3, 5, 4)""substr($3, 1, 2)""substr($3, 0, 2)";"$4}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...