como ignorar o espaço entre data e hora usando o comando awk

como ignorar o espaço entre data e hora usando o comando awk

Quero imprimir o carimbo de data/hora como uma variável do conteúdo do arquivo. Preciso do comando awk para ignorar o espaço entre os dados e a hora. O valor a ser impresso em $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

saída:

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

Saída esperada:

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

Responder1

Isso deve funcionar.

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

Como corretamente sugerido no comentário, você também pode fazer

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

Responder2

Você poderia simplificar isso usando um formato diferente para a saída de data; converta os dados do seu campo de data para o número de segundos desde a época Unix (00:00:00, 1º de janeiro de 1970) com

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

e insira esse valor inteiro no campo de data.

Responder3

Supondo que você queira e precise fazer um loopna cascasobre cada linha do arquivo (assumindo assimvocê não está apenas processando texto), você poderia escrever:

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

informação relacionada