awk :разделить столбец даты и времени на три отдельных столбца в csv

Я сделал скриптcron_script.sh:

#!/bin/bash
source /path/to/env/bin/activate
cd /path/to/script/
python3.6 script.py
deactivate

Мой кронтаб:

* * * * * /path/to/cron_script.sh
2
30.04.2021, 14:48
3 ответа

Ваш код печатает только значения подстроки, предназначенные для новых столбцов, а не для существующих столбцов.

Для первой строки требуется особая обработка.

awk -F, -v OFS="," 'NR==1 { print $0,"day,month,year"; next }
{ s = substr($5, 1, 2);
  g = substr($5, 4, 2);
  l = substr($5, 7, 4);
  print $0, s, g, l}' file.csv

печатает

id,tester,company,chief,previous_test,test,date,result,cost,day,month,year
6582983b-61d4-4371-912d-bbc76bb8208b,Audrey Feest,Pagac-Gorczany,Claudine Moakson,18/02/2019,Passwords,20/05/2020,none,£11897.96,18,02,2019

Пояснение:

  • Условие NR==1действительно для первой записи/строки.
  • $0вся входная запись/строка
  • Команда nextвыполняет переход к следующей записи/строке и пропускает все оставшиеся команды для текущей записи/строки. Это означает, что другие команды будут выполняться для всех записей/строк, кроме первой.

Редактировать:Как было предложено в комментарии Оливье Дюлака , разбиение строки даты можно упростить с помощью функции split.

awk -F, -v OFS="," 'NR==1 { print $0,"day,month,year"; next }
{ split($5,a,"/"); print $0, a[1], a[2], a[3] }' file.csv
5
28.07.2021, 11:36

Вам не нужно разбивать $5, просто измените /на ,и распечатайте. С GNU awk дляgensub():

$ awk -F, '{print $0 FS (NR>1 ? gensub("/",FS,"g",$5) : "day,month,year") }' file
id,tester,company,chief,previous_test,test,date,result,cost,day,month,year
6582983b-61d4-4371-912d-bbc76bb8208b,Audrey Feest,Pagac-Gorczany,Claudine Moakson,18/02/2019,Passwords,20/05/2020,none,£11897.96,18,02,2019

С любым awk:

$ awk -F, '{d=$5; gsub("/",FS,d); print $0 FS (NR>1 ? d : "day,month,year") }' file
id,tester,company,chief,previous_test,test,date,result,cost,day,month,year
6582983b-61d4-4371-912d-bbc76bb8208b,Audrey Feest,Pagac-Gorczany,Claudine Moakson,18/02/2019,Passwords,20/05/2020,none,£11897.96,18,02,2019
3
28.07.2021, 11:36

Выполняется командой ниже

 awk -F "," 'NR==1{print $0",day,month,year"}NR == 2{print $0","substr($5,1,2)","substr($5,4,2)","substr($5,7,4)}' file

выход

id,tester,company,chief,previous_test,test,date,result,cost,day,month,year
6582983b-61d4-4371-912d-bbc76bb8208b,Audrey Feest,Pagac-Gorczany,Claudine Moakson,18/02/2019,Passwords,20/05/2020,none,£11897.96,18,02,2019
1
28.07.2021, 11:36

Теги

Похожие вопросы