필드 구분 기호 및 인용 문자 변경

필드 구분 기호 및 인용 문자 변경

서로 다른 두 파일의 내용을 수정하고 싶습니다. Unix에서 일반 스크립트를 사용하여 예상 출력을 얻는 방법은 무엇입니까?

첫 번째 파일: "인용된 문자열 내부 ",인용된 문자열 내부의 (구분 기호)

예:

"20181115","12345643","This is a "test"","","657","This is a "TEST"","","aaaa"
"20181115","12345632","This is an "example" of the file, a "sample" aaaa","123","",""TEST"","",""

예상 출력:

~20181115~;~12345643~;~This is a "test"~;~~;~657~;~This is a "TEST"~;~~;~aaaa~
~20181115~;~12345632~;~This is an "example" of the file, a "sample" aaaa~;~123~;~~;~"TEST"~;~~;~~

두 번째 파일: ( |구분 기호) 따옴표로 묶인 문자열 및 "문자열 내 여러 개

예:

"098789"|"Hello world!"| 12,7|"Cities I want to visit Rome| London"|15.11.2018|"Yes"
"032425"|"Travel in ""New York"", USA"| 113,3||15.11.2018|"Yes"

예상 출력:

~098789~;~Hello world!~; 12,7;~Cities I want to visit Rome| London~;15.11.2018;~Yes~
~032425~;~Travel in /"New York/", USA~; 113,3;;15.11.2018;~Yes~

답변1

간단한 대체를 통해 sed첫 번째 문제를 해결해 보세요.

sed 's/","/~;~/g; s/^"\|"$/~/g' file

awk두 번째로 더 복잡한 스크립트는 다음 과 같습니다 .

awk -F\" '{$1=$1; for (i=2; i<=NF; i+=2) gsub ("\|", SUBSEP, $i); gsub ("\|", ";"); gsub ("~~", "/\""); gsub (SUBSEP, "|")} 1' OFS="~" file 

먼저 |큰따옴표 안의 모든 내용을 텍스트 파일에서 일반적으로 발견되지 않는 일반적이지 않은 자리 표시자로 바꾼 다음 필요한 대체 작업을 수행한 다음 자리 표시자 대체를 되돌립니다.

두 가지 모두 문제에 맞게 맞춤화되어 있으므로 일반적으로 조정 없이는 유사한 문제라도 다른 문제에 대해서는 작동하지 않습니다.

질문의 예에 적용하면 다음과 같이 출력됩니다(Ubuntu, mawk 1.3.3 Nov 1996).

~098789~;~Hello world!~; 12,7;~Cities I want to visit Rome| London~;15.11.2018;~Yes~
~032425~;~Travel in /"New York/", USA~; 113,3;;15.11.2018;~Yes~

관련 정보