Сообщение об ошибке «Недопустимая дата» при преобразовании формата даты из файла CSV? -ракушка - PullRequest
3 голосов
/ 23 февраля 2020

Я новичок в сценариях оболочки, я пытаюсь получить дни недели из столбца CSV, который имеет даты в формате:

16/10/2015
19/06/2010
16/09/2013
4/7/2008
29/12/2017

Я использовал Дата -% A и преобразовал результаты, но не во все, и все еще получает сообщение об ошибке с результатами:

date: invalid date ‘16/10/2015’ 
date: invalid date ‘19/06/2010’ 
date: invalid date ‘16/09/2013’ 
Monday 
date: invalid date ‘29/12/2017’ 
Monday

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

Friday
Saturday
Monday
Wednesday
Friday

мой код:

cat file.csv | awk -F "," 'NR>1 {print $4}' | awk -F, '{"date +%A -d\""$1 "\""| getline dte;$1=dte}1' OFS=","

I также пытался переформатировать значения в тип даты перед преобразованием, чтобы убедиться, но все еще получая сообщение об ошибке, у меня есть большой файл данных, поэтому я пытаюсь l oop на весь столбец в awk

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Не могли бы вы попробовать выполнить следующие действия в чистом виде bash (протестировано и написано только с предоставленными образцами).

while read line
do
  IFS='/' read -ra arr <<< "$line"
  newDate=${arr[2]}/${arr[1]}/${arr[0]}
  date -d  $newDate +%A
done < "Input_file"

Для предоставленных образцов будут получены следующие данные.

Friday
Saturday
Monday
Friday
Friday
2 голосов
/ 23 февраля 2020

Быстрое преобразование даты в полное имя дня недели с помощью GNU awk:

awk 'BEGIN{FS="/"} {t=sprintf("%d %d %d 0 0 0",$3,$2,$1); print strftime("%A",mktime(t))}' Input_file

См .: gawk - Функции вычисления даты и времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...