2017-03-20 1 views
-2

私は充てんされたデータinitを持つ連邦のpdf形式をいくつか持っています。例えばi765と言いますが、私はこの書式のデータをテキスト形式で入手できます。最小限の解析でこのフォームからデータを抽出するにはどうすればよいですか。どのように "違い"を識別するスクリプトを書くことができますが、それはそれだけで充足された情報です。例えばのために静的フォームからデータを抽出する最も良い方法は何ですか?

:行が含まれている場合..

SSN:(空白)とフォームに記入実際にはSSNを持っています!ABCは#456

@そうな情報で満たされたABC以外の何ものでもありません! @#456これは文字列の違いだけです。私が従うことができる既知のアプローチはありますか?すべてのポインタは非常に感謝しています。

+1

、シェルでこれを試してください: 'diffをBlankFile.txt FileWithData .txt'。それはあなたが必要とするものを与えますか?その場合は、2つのテキストファイルを繰り返し処理してデータを比較する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 -y <(sort empty) <(sort filled) 

Address=""       | Address="Europe" 
Age=""        | Age="42" 
Kids=""        | Name="George" 
Married=""       | Surname="Vasiliou"            
Name=""        < 
Surname=""       < 
+0

が更新されました。上記の解決策が適切かどうかを教えてください。 –

関連する問題