Я хочу вывести временную метку как одну переменную из содержимого файла. Мне нужна команда awk, чтобы игнорировать пробел между данными и временем. Значение, которое будет выведено в $2 как SECOND_VALUE.
бывший:
$ cat /var/tmp/file.txt
1#04-06-2019 03:06:17
Код:
list=`cat /var/tmp/${file}.txt`
for i in $list
do
FIRST_VALUE=`echo $i|awk -F'#' '{print $1}'`
SECOND_VALUE=`echo $i|awk -F '#' '{print $2}'`
done
выход:
++ cat /var/tmp/file.txt
+ list='1#04-06-2019 03:06:17' '
+ for i in '$list'
++ echo 1#04-06-2019
++ awk -F# '{print $1}'
+ FIRST_VALUE=1
++ echo 1#04-06-2019
++ awk -F '#' '{print $2}'
+ SECOND_VALUE=04-06-2019
Ожидаемый результат:
SECOND_VALUE=04-06-2019 03:06:17
решение1
Это должно сработать.
second_val=$(cat /var/tmp/file.txt | awk -F '#' '{print $2}')
Как справедливо предложено в комментарии, вы также можете сделать
second_val=$(awk -F '#' '{print $2}' /var/tmp/file.txt)
решение2
Вы можете упростить это, используя другой формат для вывода даты; преобразуйте данные поля даты в количество секунд с начала эпохи Unix (00:00:00, 1 января 1970 г.) с помощью
$ date -d "2019-06-04 14:02:32" +"%s"
а затем вставьте это целое значение в поле даты.
решение3
Предполагая, что вы хотите и вам нужно зациклитьв оболочкенад каждой строкой файла (предполагая, чтовы не просто занимаетесь обработкой текста), вы могли бы написать это:
while IFS='#' read <&3 -r first_value second_value; do
something with "$first_value" and "$second_value" 3<&-
done 3< "/var/tmp/${file}.txt"