Преобразуйте формат даты в файле в определенном столбце из + "% Y-% m-% d" в + "% d-% m-% Y" - PullRequest
0 голосов
/ 05 июня 2019

Я запускаю скрипт bash, который выводит это:

2019-06-05 08:30 99432434
2019-06-05 10:00 99432465
2019-06-05 11:00 97987567
2019-06-05 12:00 97433556
2019-06-05 13:15 96844558
2019-06-05 17:00 97091234
2019-06-05 18:00 96764765
2019-06-05 19:00 99878787

Я хочу преобразовать формат даты в первом столбце так:

05-06-2019 08:30 99432434
05-06-2019 10:00 99432465
05-06-2019 11:00 97987567
05-06-2019 12:00 97433556
05-06-2019 13:15 96844558
05-06-2019 17:00 97091234
05-06-2019 18:00 96764765
05-06-2019 19:00 99878787

Так что в основном это должно стать +"%d-%m-%Y", тогда как теперь это +"%Y-%m-%d".

Я попытался передать вывод команды следующим образом:

while read -r line; do echo $(date -d "$line" +%Y-%m-%d); done

Но он проходит через весь файл и приводит к следующему:

date: invalid date 2019-06-06 08:30 99432434
date: invalid date 2019-06-06 10:00 99432465
date: invalid date 2019-06-06 11:00 97987567
date: invalid date 2019-06-06 12:00 97433556
date: invalid date 2019-06-06 13:15 96844558
date: invalid date 2019-06-06 17:00 97091234
date: invalid date 2019-06-06 18:00 96764765
date: invalid date 2019-06-06 19:00 99878787

Как изменить формат даты первого столбца на +"%d-%m-%Y"?

Ответы [ 4 ]

1 голос
/ 05 июня 2019

С любым седом:

$ sed 's/\(....\)\(....\)\(..\)/\3\2\1/' file
05-06-2019 08:30 99432434
05-06-2019 10:00 99432465
05-06-2019 11:00 97987567
05-06-2019 12:00 97433556
05-06-2019 13:15 96844558
05-06-2019 17:00 97091234
05-06-2019 18:00 96764765
05-06-2019 19:00 99878787
1 голос
/ 05 июня 2019

Поскольку у вас есть фиксированный формат, вы можете покончить с манипулированием датами и просто использовать awk, чтобы перетасовать поля вокруг:

awk -F'[- ]' '{ print $3"-"$2"-"$1" "$4" "$5 }' file

выходных данных

05-06-2019 08:30 99432434
05-06-2019 10:00 99432465
05-06-2019 11:00 97987567
05-06-2019 12:00 97433556
05-06-2019 13:15 96844558
05-06-2019 17:00 97091234
05-06-2019 18:00 96764765
05-06-2019 19:00 99878787
0 голосов
/ 05 июня 2019

Если у вас GNU date, вы можете использовать опцию -f, чтобы прочитать несколько дат из файла и вызвать date только один раз; в сочетании с cut, paste и процессом подстановки вы получите что-то вроде

paste -d ' ' \
    <(date -f <(cut -d' ' -f1  infile) '+%d-%m-%Y') \
    <(cut -d' ' -f2- infile)
0 голосов
/ 05 июня 2019

Считайте первый столбец в одну переменную ($d ниже), а остальные в другую ($rest ниже):

while read -r d rest; do echo $(date -d "$d" +%d-%m-%Y) $rest; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...