Eu tenho um arquivo chamado test_data.txt e dentro do arquivo está o seguinte:
20:20:20 test1
20:21:21 test2
20:21:49 test3
20:21:57 test4
20:21:57 test5
20:21:57 test6
20:22:57 test7
20:25:59 test8
20:25:59 test9
20:25:59 test10
20:25:59 test11
20:29:03 test12
20:29:04 test13
20:29:31 test14
A primeira coluna é o que eu quero pesquisar, por exemplo. A 1ª coluna apresenta horas:minutos:segundos (HH:MM:SS). Gostaria de usar variáveis para extrair dados de toda a linha se a hora e os minutos forem atendidos:
var1=20:20
var2=20:22
cat test_data.txt | awk '{if ($1 == "'"$var1"'" || $1 == "'"$var2"'") print $0;}'
Saída esperada:
20:20:20 test1
20:22:57 test7
O awk que estou usando claramente não funciona, pois não quero pesquisar em segundos. O método abaixo funciona, mas como uso múltiplas variáveis no exemplo:
var1=20:20
var2=20:22
ERE='^'$var1':[[:digit:]]+$' <test_data.txt awk '$1 ~ ENVIRON["ERE"]'
Não tenho certeza se o acima pode lidar com várias variáveis no mesmo comando como um
Saída do comando acima:
20:20:20 test1
Você pode passar vários valores HH:MM para o awk como uma string separada por espaço e, em seguida, quebrá-lo em uma matriz no bloco awk BEGIN. Então, para cada registro do arquivo de dados, teste se $1 começa com uma das strings HH:MM.
Com base em parte do código de @glennjacman - você pode criar uma tabela de hash a partir dos tempos de destino e usar uma pesquisa de hash nos valores de entrada para eficiência: