리눅스를 사용하여,
(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자리 우편번호처럼 보이지만 모든 행이 그렇지는 않습니다. 많은 경우 도시 이름과 국가가 끝에서 두 번째 필드와 마지막 필드(예: "Kolkata India")로 표시되지만 일부는 국가를 건너뛰고 일부는 우편번호 앞에 도시 이름을 포함하며 일부는 거리 이름 뒤에 도시를 포함합니다. 이름 주소 , 일부에는 도시도 국가도 없습니다. 일부는 주소 앞에 사람/가족/회사 이름이 있고, 일부는 주소 뒤에 있고, 일부는 이름이 없습니다.
간단히 말해서 전체 파일이 엉망이고 거리 이름, 도시/읍/교외 이름, 우편번호, 주 이름 등이 많이 없으면 자동으로 처리할 수 없습니다. 이러한 목록이 있더라도 결합해 보세요. 모두 한 줄의 하위 문자열과 일치하는 것은 매우 복잡합니다.
이 문제를 해결하려면 정규식이나 기타 공식이 아닌 지능(인간 또는 인공 지능)이 필요합니다.
이는 아무런 구조도 갖고 있지 않은 자유 형식 텍스트를 처리하려고 할 때 발생하는 문제입니다. 파일에 몇 가지 이상한 점이 있기 때문에 이 .csv 파일은 순수한 자유 형식을 훨씬 뛰어넘어 "이상한 형식"이 됩니다.
이것이 바로 사용자가 자유 형식 텍스트 필드에 주소를 입력하도록 허용해서는 안 되는 이유입니다. 주소를 구성하는 다양한 부분(이름, 거리 번호, 거리 이름, 교외, 도시, 우편번호, 국가 등)에 대한 표준 필드 세트를 제공합니다. 일부 사용자는 여전히 문제를 해결할 수 있지만 대부분의 데이터는 사용 가능한 형태로 유지됩니다. 나머지는 수동으로 수정하거나 삭제할 수 있습니다.
IMO, 가장 좋은 방법은 텍스트 편집기(예 grep
: . vi
와 같은 nano
.
나는 다음과 같은 것을 제안하고 싶습니다 :
name:street address:postal code:city:country:comments
참고: .csv 파일에는 문자가 많지 않으며 :
, 해당 문자를 삭제하거나 .
문자로 대체할 수 있습니다. 또한 country
아마도 선택 사항일 수 있지만(인도 주소만 있는 목록인 것처럼 보임) 갖고 있어도 문제가 되지 않습니다. 국가 필드가 비어 있으면 코드가 기본적으로 "인도"로 설정될 수 있습니다.
아니면 쓰레기가 아닌 주소 목록을 찾으려고 할 수도 있지만... 주소 목록이 전부이기 때문에 주소 목록을 만들려고 하는 것 같습니다.