как игнорировать пробел между датой и временем с помощью команды awk

как игнорировать пробел между датой и временем с помощью команды awk

Я хочу вывести временную метку как одну переменную из содержимого файла. Мне нужна команда 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"

Связанный контент