2017-03-20 118 views
-2

我有一些聯邦pdf格式的填充數據init。可以說,例如i765,我有這種形式的數據可用文本格式,適當填寫的細節。我怎樣才能從這個表格中提取數據並進行最少的解析。讓我們說如何寫一個腳本來標識「差異」,這本身就是充滿信息。從靜態表單中提取填充數據的最佳方式是什麼?

對於例如:如果一個行包含..

SSN:(空白)和實際填寫表單有SSN:ABC @#456

所以填寫的信息是什麼,但ABC! @#456這只是字符串之間的區別。有沒有一種我可以遵循的已知方法。任何指針都非常感謝。

+1

如果你有兩個空白表格的文字版本和填好的表格,試試這個在shell:'差異BlankFile.txt FileWithData .txt'。這是否給你所需要的?如果是這樣,編寫一個Scala程序來迭代兩個文本文件並比較數據。如果您有困難,請在這裏展示您的工作,我們會爲您提供幫助。 – radumanolescu

回答

0

如果我們談論的是Linux的工具,那麼你可以嘗試各種解決方案,如:

$ 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=""       < 
+0

已更新。讓我知道上述解決方案是否合適。 –

相關問題