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"