![필드 구분 기호 및 인용 문자 변경](https://linux55.com/image/142101/%ED%95%84%EB%93%9C%20%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%20%EB%B0%8F%20%EC%9D%B8%EC%9A%A9%20%EB%AC%B8%EC%9E%90%20%EB%B3%80%EA%B2%BD.png)
서로 다른 두 파일의 내용을 수정하고 싶습니다. 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~