使用 diff -e 选项创建基线 diff 文件





5.00/5 (2投票s)
如何使用 diff -e 选项创建基线 diff 文件
引言
对于我正在开发的一个系统/服务,我基本上需要维护一个基线,它是一个包含人口统计信息的 CSV 文件。基线文件有很多行,每一行代表一个人的人口统计信息。然后,一个 cronjob 服务会创建一个包含更新的信息或新增人员的临时 CSV 文件。我的服务处理这个新的临时文件,并更新基线以包含任何更改的数据或新增人员,以及从基线中删除的任何人员。
这篇文章基本上告诉你如何使用 diff -e
选项生成一个 GNU ed 编辑器 脚本,结合 ed 和其他命令来正确地创建一个新的基线文件。
Bash 脚本 & 变量
该脚本在 bash shell 中运行,我创建变量来引用基线和临时文件
#!/bin/bash
NOW=$(date +"%Y%m%d%H%M") # Timestamp for creating files.
BASELINE=`ls baseline/baseline.csv`
TEMP=`ls temp/compare.csv`
在上面的脚本中,变量 $NOW
用于给文件打时间戳。时间戳的格式是“yyyymmddhhmm
”。每当你想要跟踪文件创建时间时,这会很有用。变量 $baseline
是基线文件,而 $TEMP
是临时文件。
创建 ed 脚本
以下行使用 -e
选项与 diff
一起创建 ed 脚本
diff -e $BASELINE $TEMP > ed-script
文件“ed-script
”基本上是一个 ed
编辑器脚本。
创建新的基线
然后,要使用 ed 脚本
创建新的基线,你需要运行以下命令
cp $BASELINE baseline/new_baseline.csv
(cat ed-script && echo w) | ed - baseline/new_baseline.csv
我展示了 2 行命令,第一行首先创建原始基线的副本,以免立即覆盖原始基线;第二行创建新的基线。脚本中的 (cat ed-script && echo w)
部分,基本上将 ed-script
输出到标准输出,然后发出 w
命令来写入文件;所有这些都通过管道传递给 ed
和新的基线文件以生成。
备份旧基线
以防万一出现问题,最好归档(或备份)内容
mv $BASELINE archive/baseline_$NOW.csv
mv baseline/new_baseline.csv $BASELINE
以上将原始基线移动到存档文件夹,并在文件名末尾追加时间戳。然后,第二个移动 (mv
) 将文件重命名为 baseline.csv,从而完成新基线的创建。
完整脚本
供参考,这是完整的脚本
#!/bin/bash
NOW=$(date +"%Y%m%d%H%M") # Timestamp for creating files.
BASELINE=`ls baseline/baseline.csv`
TEMP=`ls temp/compare.csv`
diff -e $BASELINE $TEMP > ed-script
cp $BASELINE baseline/new_baseline.csv
(cat ed-script && echo w) | ed - baseline/new_baseline.csv
mv $BASELINE archive/baseline_$NOW.csv
mv baseline/new_baseline.csv $BASELINE
尽情享用!