我有一个名为 test_data.txt 的文件,文件中的内容如下:
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
例如,第一列是我要搜索的内容。第一列显示时:分:秒 (HH:MM:SS)。如果满足小时和分钟,我想使用变量来提取整条线的数据:
var1=20:20
var2=20:22
cat test_data.txt | awk '{if ($1 == "'"$var1"'" || $1 == "'"$var2"'") print $0;}'
预期输出:
20:20:20 test1
20:22:57 test7
我正在使用的 awk 显然不起作用,因为我不想按秒搜索。下面的方法确实有效,但我如何在示例中使用多个变量:
var1=20:20
var2=20:22
ERE='^'$var1':[[:digit:]]+$' <test_data.txt awk '$1 ~ ENVIRON["ERE"]'
我不确定上面是否可以在同一个命令中处理多个变量
上述命令的输出:
20:20:20 test1
您可以将多个 HH:MM 值作为空格分隔的字符串传递给 awk,然后将其分解为 awk BEGIN 块中的数组。然后对于数据文件的每条记录,测试 $1 是否以 HH:MM 字符串之一开头。
建立在@glennjacman 的一些代码之上——您可以从目标时间创建一个哈希表,并对输入值使用哈希查找以提高效率: