cómo ignorar el espacio entre fecha y hora usando el comando awk

cómo ignorar el espacio entre fecha y hora usando el comando awk

Quiero imprimir la marca de tiempo como una variable del contenido del archivo. Necesito el comando awk para ignorar el espacio entre los datos y el tiempo. El valor que se imprimirá en $2 como SECOND_VALUE.

ex:

$ cat /var/tmp/file.txt
1#04-06-2019 03:06:17

Código:

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

producción:

++ 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

Salida esperada:

SECOND_VALUE=04-06-2019 03:06:17 

Respuesta1

Esto debería funcionar.

second_val=$(cat /var/tmp/file.txt | awk -F '#' '{print $2}')

Como correctamente se sugiere en el comentario, también puedes hacer

second_val=$(awk -F '#' '{print $2}' /var/tmp/file.txt)

Respuesta2

Podrías simplificar esto usando un formato diferente para la salida de la fecha; convierta los datos de su campo de fecha al número de segundos desde la época de Unix (00:00:00, 1 de enero de 1970) con

$ date -d "2019-06-04 14:02:32" +"%s"

y luego inserte ese valor entero en el campo de fecha.

Respuesta3

Suponiendo que quieras y necesites hacer un bucleen el caparazónsobre cada línea del archivo (suponiendo queno solo estás procesando texto), podrías escribirlo:

while IFS='#' read <&3 -r first_value second_value; do
  something with "$first_value" and "$second_value" 3<&-
done 3< "/var/tmp/${file}.txt"

información relacionada