Linuxを使って、
(one address in one single line)
アドレスは含まれているが特定のアドレスは含まれていないファイルで、重複したアドレスを並べ替えて識別したいと思いますdelimiter
。ファイル名が重複アドレス自体であるファイルの各重複アドレスのリダイレクトのリスト。
grep -i "AX.*BY.*CZ"
アドレスを使用してすべて試しました。criteria, sed, awk, agrep
しかし、問題は、文字列がファイルに存在する場合にのみ検索するたびに、出力AX and then BY and then CZ
に多くの例外があることです。
どうすればいいか教えてください。
答え1
ファイルを確認してみるとaddress-list.csv
こんな感じです。ゴミは入り、ゴミは出てくる。
grep
orで欲しいことができるか疑われますsed
。実際、これに使用できるツールやスクリプト言語があるかどうか疑われます。
awk
同様の機能言語を使用すると、perl
漠然と便利な操作を実行できますが、アドレスは一貫した形式を持っていないようです。ほとんどの住所は6桁の郵便番号のように見えますが、すべての行はそうではありません。多くの場合、都市名と国は最後の2番目のフィールドと最後のフィールド(「Kolkata India」など)で表示されますが、一部は国をスキップし、一部は郵便番号の前に都市名を含み、一部は街名の後に都市を含めます。します。名前の住所、一部には都市も国もありません。一部は住所の前に人/家族/会社名があり、一部は住所の後にあり、一部は名前がありません。
簡単に言えば、ファイル全体がめちゃくちゃで、通り名、都市/邑/郊外名、郵便番号、州名などがたくさんないと自動的に処理できません。これらのリストがあっても組み合わせてみてください。すべて1行の部分文字列と一致するのは非常に複雑です。
この問題を解決するには、正規表現や他の公式ではない知能(人間または人工知能)が必要です。
これは、構造を持たない自由形式のテキストを処理しようとしたときに発生する問題です。ファイルにはいくつかの奇妙な点があるため、この.csvファイルは純粋な自由形式をはるかに超えて「奇妙な形式」になります。
これが、ユーザーが自由形式のテキストフィールドにアドレスを入力できるようにしてはいけません。住所を構成するさまざまな部分(名前、通り番号、通り名、郊外、都市、郵便番号、国など)の標準フィールドセットを提供します。一部のユーザーは依然として問題を解決できますが、ほとんどのデータは利用可能な形式で維持されます。残りは手動で変更または削除できます。
IMO、最良の方法は、テキストエディタ(例えばgrep
. vi
のようなnano
。
私は次のことを提案したいと思います:
name:street address:postal code:city:country:comments
注:.csvファイルには多くの文字がなく:
、その文字を削除したり.
文字に置き換えたりすることができます。また、country
おそらく選択肢かもしれませんが、(インドの住所だけがあるリストのように見えます)、持っていても問題はありません。国フィールドが空の場合、コードはデフォルトで「インド」に設定されます。
それともゴミではなく住所リストを探そうとするかもしれませんが、住所一覧がすべてあるので住所一覧を作成しようとしているようです。