Дата синтаксического анализа в Bash

Ваше решение прекрасно, но можно использовать итератор, чтобы сделать это:

std::map<int, int> m;
m.insert(std::pair<int, int>(3, 4));
m.insert(std::pair<int, int>(5, 6));
for(std::map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
{
    int key = it->first;
    int value = it->second;
    //Do something
}
54
задан Dave Jarvis 9 May 2016 в 16:04
поделиться

8 ответов

] Должен ли быть bash? Вы можете использовать двоичный файл GNU coreutils / bin / date для многих преобразований:

 $ date --date="2009-01-02 03:04:05" "+%d %B of %Y at %H:%M and %S seconds"
 02 January of 2009 at 03:04 and 05 seconds

Это анализирует заданную дату и отображает ее в выбранном формате. Вы можете адаптировать это к своим потребностям.

64
ответ дан 7 November 2019 в 07:48
поделиться

Pure Bash:

date="2009-12-03 15:35:11"
saveIFS="$IFS"
IFS="- :"
date=($date)
IFS="$saveIFS"
for field in "${date[@]}"
do
    echo $field
done

2009
12
03
15
35
11
3
ответ дан 7 November 2019 в 07:48
поделиться
$ t='2009-12-03 12:38:15'
$ a=(`echo $t | sed -e 's/[:-]/ /g'`)
$ echo ${a[*]}
2009 12 03 12 38 15
$ echo ${a[3]}
12
7
ответ дан 7 November 2019 в 07:48
поделиться

еще один чистый bash

$ d="2009-12-03 15:35:11"
$ d=${d//[- :]/|}
$ IFS="|"
$ set -- $d
$ echo $1
2009
$ echo $2
12
$ echo $@
2009 12 03 15 35 11
1
ответ дан 7 November 2019 в 07:48
поделиться

вы пробовали использовать вырезать? что-то вроде этого: dayofweek = date | cut -d "" -f1

0
ответ дан 7 November 2019 в 07:48
поделиться

Это просто, просто преобразуйте тире и двоеточия в пробел (нет необходимости изменять IFS) и используйте «читать» все в одной строке:

read Y M D h m s <<< ${date//[-:]/ }

Например:

$ date=$(date +'%Y-%m-%d %H:%M:%S')
$ read Y M D h m s <<< ${date//[-: ]/ }
$ echo "Y=$Y, m=$m"
Y=2009, m=57
30
ответ дан 7 November 2019 в 07:48
поделиться

Метод массива, возможно, лучше, но это то, о чем вы конкретно просили:

IFS=" :-"
read year month day hour minute second < <(echo "YYYY-MM-DD hh:mm:ss")
5
ответ дан 7 November 2019 в 07:48
поделиться

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

a=date +%Y 
b=date +%S
c=date +%H

a будет год b будет секунд c будут часы. и т. д.

2
ответ дан 7 November 2019 в 07:48
поделиться
Другие вопросы по тегам:

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