在bash脚本中调用具有可变文件名的文件

在bash脚本中调用具有可变文件名的文件

假设我有一个名为 A 的源文件,其中包含许多 1 和 2 的字符串,其内容会定期自动更改(添加新的 1 和 2 字符串),并且我对此文件执行 grep 以将“1”字符串提取到另一个名为 B 的文件中。

grep '1' A > B

现在,接下来的 grep 操作不仅必须将 A 内容 grep 到 B 中,而且还要比较 B 和 A,以便将新字符串(并且仅是新字符串)提取到另一个文件中。这必须重复进行。为此,我创建一个新文件 C,其中包含 A 更新内容的“1”字符串,将其与 B 进行比较,并将差异提取到名为 D 的新文件中:

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
sleep 60
done &

问题是它无法正常工作,因为 B 是 A 的旧 grep,因此下次运行 C 时只会与未更新的旧 B 进行比较。此外,D 每次都会被覆盖。

我需要能够指示脚本每次保留最后一个 B 的副本,因此 A 总是与其之前的版本进行比较,而 C 总是显示当前 A 与之前、最后一个 B 之间的差异。我不需要保留以前版本的 C,因为我将它们复制到其他地方。

我认为我必须使用变量文件名,并且我尝试在 B 和 C 文件名中添加 $(date) 变量,但显然它不起作用,因为 grep 无法识别它们(因为每次运行之间的日期会发生变化)剧本)。

PS:我找到了一种解决方法,通过在每次运行之间擦除 A 的内容,以便仅考虑新内容,从而消除了使用变量名称和第二个 grep 操作的必要性。我仍然想学习如何在 bash 脚本中调用变量文件名。

PS2:我正在手机上编写,所以不知道如何正确编码bash脚本。

答案1

为什么不简单地替换 B 呢?

grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
cat C >> B   ####
sleep 60
done &

这种方式D只能得到 1 in 的最后 60 秒A

相关内容