밑줄을 쉼표로 바꾸고 CSV에서 큰따옴표를 제거합니다.

밑줄을 쉼표로 바꾸고 CSV에서 큰따옴표를 제거합니다.

CSV 파일이 있습니다

input.csv

"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
"1_1_0_0_79"
"1_1_0_0_80"
"1_1_0_0_81"
"1_1_0_0_82"
"1_1_0_0_83"
"1_1_0_0_84"
"1_1_0_0_85"

............. 등.

이 CSV 파일을 다음으로 변환해야 합니다.

result.csv 

1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
1,1,0,0,79
1,1,0,0,80
1,1,0,0,81
1,1,0,0,82
1,1,0,0,83
1,1,0,0,84
1,1,0,0,85

답변1

더 쉬운 방법은 다음과 같습니다.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의 표준 입력 스트림을 리디렉션 <하고 결과 출력을 파이프하여 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()이 함수는 한 줄 내에서 전역 대체에 사용되므로 밑줄을 쉼표로 바꾸고 큰따옴표를 빈 문자열로 바꾸는 데 사용합니다(문자를 효과적으로 제거함). 누락된 코드 블록에 대한 패턴 일치 대신 1기본값은 해당 행만 인쇄하는 것입니다. 즉, 코드 블록이 gsub()작업을 수행하고 1결과를 인쇄합니다.

>출력을 새 파일로 보내려면 쉘 리디렉션( )을 사용하십시오 .

 awk '{gsub(/_/,",");gsub(/"/,"")};1' input.csv > output.csv

답변2

대안으로 다음 sed명령을 사용할 수도 있습니다.

$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

답변3

명령줄 텍스트 처리의 "스위스군 전기톱"인 Perl도 이 작업을 수행할 수 있습니다. 구문은 (우연히는 아니지만) trsed예제와 매우 유사합니다.

perl -pe 'tr/_"/,/d' input.csv > result.csv

또는:

perl -pe 's/_/,/g; s/"//g' input.csv > result.csv

하지만 솔직히 말해서 이 기본 작업을 위해 새로운 프로그래밍 언어를 배우는 데 시간을 보내고 싶지 않다면(실제로 awk, Perl, sed 및 기타 유사한 도구의 경우) 검색을 지원하는 모든 도구를 사용하여 이를 수행할 수 있습니다. 텍스트 편집기를 교체하십시오.

  1. 즐겨 사용하는 텍스트 편집기(예: gedit, kate, 마우스패드 등, 일반 오래된 메모장이나 Windows의 워드패드도 가능)에서 CSV 파일을 엽니다.

  2. 메뉴에서 검색 및 바꾸기를 선택합니다(별도의 검색 메뉴가 없는 경우 일반적으로 편집에서 찾을 수 있습니다).

  3. _검색창 에 입력 한 후 ,바꾸기 상자에 입력하세요.

  4. 모두 바꾸기를 클릭합니다.

  5. 검색창에는 중복 "되고 교체 상자에는 아무것도 없습니다.

  6. 문서를 저장합니다.

이제 하나가 아닌 100개 또는 1000개의 파일로 이 작업을 수행해야 한다면 새로운 명령줄 도구를 배우는 것이 합리적입니다. 물론 Perl, sed 또는 다른 언어를 사용하는 방법을 알고 나면 나중에 유사한 작업을 수행할 때 많은 시간과 노력을 절약할 수 있습니다. 하지만 다시 하고 싶지 않은 일회성 작업의 경우 텍스트 편집기와 같은 기본 대화형 도구가 가장 간단한 솔루션인 경우도 있습니다.

답변4

입력 및 출력 구분 기호 값의 기본값을 변경하면 안되는 이유

awk -F "_" 'BEGIN { OFS="," }; {gsub(/"/,""); print $1,$2,$3,$4,$5}' input.csv

관련 정보