훨씬 간단한 방법은 사용하는 것입니다 tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
이것이 작동하는 방식 tr
은 두 개의 인수, 즉 교체 할 문자 세트와 교체 인수 를 취하는 것입니다. 이 경우에는 1 자 세트 만 있습니다. 쉘 연산자 를 통해 input.csv
입력 tr
의 stdin 스트림을 리디렉션 <
하고 결과 출력을 파이프하여 tr -d '"'
큰 따옴표를 삭제합니다.
하지만 awk
그렇게 할 수도 있습니다.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
이것이 작동하는 방식은 약간 다릅니다. awk는 각 파일을 한 줄씩 읽으며 각 인라인 스크립트는 /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
입니다. 여기에는 패턴이 없으므로 각 줄에 대해 코드 블록을 실행하는 것을 의미합니다. gsub()
함수는 한 줄 내에서 전역 대체에 사용되므로 밑줄을 쉼표로 바꾸고 큰 따옴표를 null 문자열로 대체하여 효과적으로 문자를 삭제합니다. 는 1
기본적으로 단순히 라인을 인쇄하는 코드 블록을, 누락 된 패턴 매치의 장소에; 다시 말해서 with with codeblock gsub()
이 작업을 수행하고 1
결과를 인쇄합니다.
쉘 리디렉션을 (사용하여 >
새 파일로 출력을 보낼 수) :
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv