Não tenho certeza de como sua saída esperada se relaciona com sua entrada. Eu sugeriria:
$ perl -MPOSIX -MDate::Parse -pe 's{[^,]*}{
strftime("%Y%m%d%H%M%S", localtime str2time($&))}e' <your-file
20171129151500,alert_logevent
20171129151500,alert_webhook
20171129151500,appsbrowser
20171020000000,ClearPassOnSplunk_2
20171010000000,Dnslookup
20171012000000,domainCategories
Para usar a capacidade do GNU date
de analisar essas datas e evitar executar uma invocação de date
por linha, você poderia fazer (assumindo um shell com suporte a substituição de processo no estilo ksh (como ksh, bash ou zsh)):
paste -d , <(<yourfile cut -d , -f1 | date -f- +%Y%m%d%H%M%S) \
<(<yourfile cut -d , -f2-)
Observe, no entanto, que isso é:
20181129151500,alert_logevent
20181129151500,alert_webhook
20181129151500,appsbrowser
20171020000000,ClearPassOnSplunk_2
20171010000000,Dnslookup
20171012000000,domainCategories
Embora seja o que você pediu, parece improvável que seja o que você quer, pois os Nov 29 15:15
têm mais probabilidade de serem timestamps de 2017 (ano passado) do que alguns no futuro.
Aqui, parece que essas datas são reportadas por ls -l
na localidade POSIX. Então portável, você poderia adaptar essa função de outra Q & A para convertê-la em um formato mais útil. Ou melhor, use uma maneira melhor do que ls -l
para armazenar datas do arquivo no arquivo (como GNU find -printf
ou GNU date -r
ou zsh stat
, ou GNU / BSD stat
ou ast ls --format
...) onde você pode usar um formato mais útil, preciso e não ambíguo.