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도 이 작업을 수행할 수 있습니다. 구문은 (우연히는 아니지만) tr
및 sed
예제와 매우 유사합니다.
perl -pe 'tr/_"/,/d' input.csv > result.csv
또는:
perl -pe 's/_/,/g; s/"//g' input.csv > result.csv
하지만 솔직히 말해서 이 기본 작업을 위해 새로운 프로그래밍 언어를 배우는 데 시간을 보내고 싶지 않다면(실제로 awk, Perl, sed 및 기타 유사한 도구의 경우) 검색을 지원하는 모든 도구를 사용하여 이를 수행할 수 있습니다. 텍스트 편집기를 교체하십시오.
즐겨 사용하는 텍스트 편집기(예: gedit, kate, 마우스패드 등, 일반 오래된 메모장이나 Windows의 워드패드도 가능)에서 CSV 파일을 엽니다.
메뉴에서 검색 및 바꾸기를 선택합니다(별도의 검색 메뉴가 없는 경우 일반적으로 편집에서 찾을 수 있습니다).
_
검색창 에 입력 한 후,
바꾸기 상자에 입력하세요.모두 바꾸기를 클릭합니다.
검색창에는 중복
"
되고 교체 상자에는 아무것도 없습니다.문서를 저장합니다.
이제 하나가 아닌 100개 또는 1000개의 파일로 이 작업을 수행해야 한다면 새로운 명령줄 도구를 배우는 것이 합리적입니다. 물론 Perl, sed 또는 다른 언어를 사용하는 방법을 알고 나면 나중에 유사한 작업을 수행할 때 많은 시간과 노력을 절약할 수 있습니다. 하지만 다시 하고 싶지 않은 일회성 작업의 경우 텍스트 편집기와 같은 기본 대화형 도구가 가장 간단한 솔루션인 경우도 있습니다.
답변4
입력 및 출력 구분 기호 값의 기본값을 변경하면 안되는 이유
awk -F "_" 'BEGIN { OFS="," }; {gsub(/"/,""); print $1,$2,$3,$4,$5}' input.csv