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"