Как пройти через файл и применить дату в bash? - PullRequest
1 голос
/ 23 января 2020

Я уверен, что на этот вопрос ответили, но у меня возникли проблемы с поиском в Google.

Файл выглядит так:

2020-01-01 10:33
2020-01-01 14:04
2020-01-01 17:22
2020-01-20 14:04
2020-01-21 03:33
2020-01-22 14:06 

Как мне пройти через каждую строку и применить date + "% b% d" , чтобы файл выглядел следующим образом:

Jan1 10:33
Jan1 14:04
Jan1 17:22
Jan20 14:04
Jan21 03:33
Jan22 14:06

1 Ответ

3 голосов
/ 24 января 2020

У вас есть в основном два варианта.

  1. с использованием оболочки, l oop над каждой строкой в ​​вашем файле, чтение каждой строки в переменную и вывод с датой в формате +'%b%d %H:%M'; или
  2. с использованием GNU awk, создайте datepe c из каждой строки и переходите к mktime, чтобы создать отметку времени , которую затем можно использовать с помощью strftime для вывода формата "%b%d %H:%M".

Bash Solution

while read -r line; do 
    date -d "$line" +'%b%d %H:%M'
done < file

GNU awk Solution

awk '{
    gsub(/[-:]/," ",$0)                # remove '-' and ':'
    ts=mktime($0 " 00")                # add " 00" creating datespec, create timestamp
    print strftime("%b%d %H:%M",ts)    # output new date format
}' file

( примечание: mawk, по крайней мере, начиная с версии 1.3.3, также поддерживает mktime и strftime)

Пример вывода

В обоих случаях вывод один и тот же:

Jan01 10:33
Jan01 14:04
Jan01 17:22
Jan20 14:04
Jan21 03:33
Jan22 14:06

Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.

...