如果有这种格式的文档:
Data point 1:
field 1:
field 2:
field 3:
Data point 2:
field 1:
field 2:
field 3:
Data point 3:
etc...
您可以通过滚动文件中的数千行来手动验证每个数据点的每个字段是否存在,但这样做效率低下且耗时。
我考虑过拆分文件并使用 diff
比较每个部分,但同样,如果行数或格式存在差异,这将很容易出现问题。
那么您将如何处理文件并验证每个点的编号和预期字段是否正确?
最佳答案
创建一个以 : 开头的 bash 脚本
#!/bin/bash
在该脚本中,创建一个从标准输入中读取的函数,检查单个“记录”中的每个字段,如下所示:
check_record()
{
local LINE
IFS= read -r LINE
[[ "$LINE" =~ ^[[:space:]]*field 1: ]] || return 1
IFS= read -r LINE
[[ "$LINE" =~ ^[[:space:]]*field 2: ]] || return 1
...
}
如果记录正常,函数返回 0(真),否则返回 1。
然后创建一个函数来搜索指示记录开始的行:
find_records()
{
local LINE
while IFS= read -r LINE
do
[[ "$LINE" =~ ^Data ]] || continue
check_record || echo "Bad record: $LINE"
done
}
最后,添加一行(在最后,在两个函数之外),将文件作为第一个参数传递给该函数。
find_records <"$1"
您可能想要添加错误检查,数据文件中允许或不允许的内容(例如空行)的详细信息可能会有所不同,但这应该传达基本思想。
请注意使用了特定于 bash 的 [[ ]]
条件和 =~
模式匹配,如果您需要解释请询问。
关于linux - 验证文本文件显示每个数据集的预期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667447/