我有一些带有填充数据init的联邦pdf表单。让我们举个例子i765,我可以用文本格式提供这种表格的数据,并详细填写。如何通过最少的解析从此表单中提取数据。让我们说如何编写一个标识“差异”的脚本,这本身只不过是填充的信息。
例如:如果一行包含..
SSN :(空白)和实际填写的表格有SSN:ABC!@#456
所以填写的信息只不过是ABC!@#456这只是字符串之间的区别。我可以遵循一种已知的方法吗?任何指针都非常感激。
答案 0 :(得分:0)
如果我们谈论的是Linux Tools,那么您可以尝试各种解决方案,例如:
$ join -t"=" -a1 -o 0,2.2 <(sort emptyform) <(sort filledform) # "=" is used as delimiter
甚至没有排序要求的awk:
$ awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \
END{print "\n Missing fields:";for (i in a) print i,a[i]}' empty filled
测试:
cat <<EOF >empty
Name=""
Surname=""
Age=""
Address=""
Kids=""
Married=""
EOF
cat <<EOF >filled
Name="George"
Surname="Vasiliou"
Age="42"
Address="Europe"
EOF
join -t"=" -a1 -o 0,2.2 <(sort empty) <(sort filled)
#Output:
Address="Europe"
Age="42"
Kids=
Married=
Name="George"
Surname="Vasiliou"
awk输出
awk 'BEGIN{FS=OFS="="}NR==FNR{a[$1]=$2;next}{if ($1 in a) {print;delete a[$1]}} \
END{print "\nnot completed fields:";for (i in a) print i,a[i]}' empty filled
Name="George"
Surname="Vasiliou"
Age="42"
Address="Europe"
not completed fields:
Married=""
Kids=""
特别是在awk中,如果您从{if ($1 in a) {print;delete a[$1]}}
删除打印件,则END部分将仅打印缺少的字段。
另一个具有良好可视化界面的替代方案是使用diff实用程序:
$ diff -y <(sort empty) <(sort filled)
Address="" | Address="Europe"
Age="" | Age="42"
Kids="" | Name="George"
Married="" | Surname="Vasiliou"
Name="" <
Surname="" <