Notepad ++-쉼표로 구분 된 파일에서 첫 번째 열 제거


14

첫 번째 데이터 열을 제거해야하는 큰 CSV 파일이 있습니다. Excel에서 열의 일부 값을 과학적 숫자로 변환하기 때문에 Excel에서 열 수 없습니다.

Notepad ++을 사용 하고 있으며 EXE 파일에서 첫 번째 열을 문자열로 연결하려고합니다.

1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5

~처럼 보인다

Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5

답변:


13

메모장 ++의 검색 및 바꾸기는이를 위해 쉽게 사용할 수있는 정규식 (regex)을 지원합니다.

다음 정규식을 사용하여 검색하십시오.

^[^,]+,(.+)

이것은 줄의 시작과 쉼표, 쉼표, 나머지 줄이 아닌 가능한 많은 문자를 찾습니다. 나머지 줄은 첫 번째 부분 일치로 그룹화됩니다.

전 세계적으로 다음으로 대체하십시오.

\1

이것은 첫 번째 부분 일치 (줄의 나머지)를 나타냅니다. 이것에 의해 각 줄은 첫 번째 열과 쉼표 뒤의 모든 것으로 바뀝니다.

단일 전역 바꾸기에서 위의 방법을 찾은 후 그에 따라 회신을 업데이트 한 후이 회신 이 기본적으로 동일하지만 사용 된 정규식에 대한 포괄적 인 설명을 제공합니다.


참고 :^[^,]+, 메모장 ++은 마지막 문자열을 제외한 모든 열을 대체하므로 더 짧은 정규 표현식 을 빈 문자열로 전역 바꾸기에 사용할 수 없습니다. 첫 번째 열을 교체 한 후 두 번째 열 (현재 첫 번째이며 정확히 정규 표현식과 일치) 교체 한 다음 세 번째 등으로 교체하십시오. 그러나 더 짧은 정규 표현식은 다른 편집기 (예 : PSPad 또는 vim ) 와 완벽하게 작동합니다 .


이것이 여기가는 길입니다. OP에 이미 N ++이있는 경우 이것이 가장 빠른 방법입니다. 나는 이것을 PSPad (btw로 한 번에 할 수 있음)로 많이합니다. 또한 정규식이 어떻게 작동하는지 체크 아웃 : rubular.com/r/OiehkBT0vA을
simbabque

메모장 ++는 입력을 한 줄씩 처리하지 않고 문자별로 처리합니다. 그것은 멀티 라인 패턴과 같은 몇 가지 깔끔한 장점이 있습니다.
Dennis

편집시 +1 안타깝게도 귀하의 답변은 커뮤니티 위키입니다.
Dennis

@Dennis 예, 10-edits limit에 대해 몰랐기 때문에 너무 자주 편집했습니다.
연설자

^[^,]+,비어 있고 대체 하지 않습니까?
knittl

10

Ctrl+를 누르고 H다음 교체를 수행하십시오.

Find what:          .*?,(.*)
Replace with:       \1
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked

이제 Alt+ A를 눌러 모든 발생을 바꿉니다.

작동 원리

  • 정규 표현식은 .*?,(.*) 전체 라인을 일치 :

    • .*?, 쉼표 자체를 포함하여 첫 번째 쉼표 앞의 모든 항목과 일치합니다.

      .*는 임의의 문자 발생 횟수를 의미하며 물음표는 수량 자를 게으르게합니다 . 즉 가능한 적은 문자와 일치합니다.

    • (.*) 첫 번째 쉼표 뒤의 모든 항목과 일치합니다.

      .*괄호로 묶으면 서브 패턴으로 변환되므로 대체 필드에서 마스트에 액세스 할 수 있습니다.

  • \1첫 번째 부분 일치 (에 대한 일치)를 나타냅니다 (.*).

    결과적으로 Notepad ++는 첫 번째 쉼표 뒤에 오는 모든 항목으로 줄을 바꿉니다.


메모장 ++에서는 빈 문자열로 전역 적으로 대체 된 것이 작동하지 않는다는 것을 알았을 때와 동일한 아이디어를 얻었 습니다^[^,]+, . (+1)
speakr

6

Windows에서는 다음과 같이 할 수 있습니다.

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv

열이 6 개라고 가정했습니다. 더 많은 열이있는 경우 * in tokens 필드에서 실험 해보십시오. Windows 에서 아이디어를 얻는 아이디어


2
임의의 수의 열에 대해 다음을 사용하십시오.for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
SeanC

3

리눅스 시스템이나 유닉스 스타일 환경이 있다고 가정하면 ( 고우를 좋아하거나 유닉스 유틸리티에서 유틸리티를 스너프 할 수 있습니다 ) 파일을 통해 실행 cut -d , -f2-6하면 트릭을 수행해야 한다고 생각 -d합니다. deliminator 및 f2-66 자 두 번째 출력합니다.

cat input.csv | cut -d , -f2-6 > output.csv입력 파일을 가져 와서 출력 파일을 추출하는 트릭을 수행합니다. 메모장을 사용하지 않고 빠르고 간단합니다.


고맙습니다. 방금 링크를 클릭했는데 403 오류가 발생 했습니까?
MikeD

두 링크 모두 저에게 효과적입니다. 나는 보통 googling을 통해 gowling을 발견합니다-bmatzelle에 속한 github repo에 있습니다. Cygwin은 옵션 일 수도 있지만, 이런 종류의 것들에 대한 과잉 행동
Journeyman Geek

2

CSV를 Excel에로드하고 숫자를 텍스트로 처리해야합니다 (과학 숫자로 변환하지 못하도록 방지).

  1. 엑셀 열기
  2. 데이터 탭
  3. 텍스트에서
  4. 구분을 선택하십시오
  5. 기타 선택 : ","
  6. 모든 열에 대해 데이터 미리보기 창에서 해당 열을 선택하고 텍스트를 선택하십시오.
  7. 열을 제거하십시오
  8. CSV로 저장

Excel에서 CSV 파일을 편집하고 저장하면 유럽식 Excel에서 EAN 코드 및 미국식 부동 소수점과 같은 숫자가 깨지는 경우가 종종 있습니다. 가져올 때 모든 것을 설정하더라도 일부를 먹습니다. 아마도 효과가 있지만 추천 할 수는 없습니다. 생산적인 환경에서는 이에 대해 조언 할 것입니다.
simbabque

이것은 훌륭하게 작동했습니다! Thnak you
MikeD

@simbabque 나는 그것이 약간 불공평하다고 말하고 싶습니다. 생산 환경에서 대량의 데이터 세트를 위해 성공적으로 사용하여 조작이 필요했습니다. Excel에는 예기치 않은 방식으로 데이터를 변경하는 습관이 있지만이 위험이 다른 방법보다 특히 크다고는 말할 수 없습니다.
제임스 우드

나는 때때로 그것을 사용하지만이 시간의 대부분은 그것을하고 싶지 않습니다. 처리 방법을 알고 있다면 정규식 검색 및 바꾸기를 지원하는 텍스트 편집기를 사용하는 것이 훨씬 빠릅니다. 그러나 대답이 명확하고 간결하기 때문에 공격은 없습니다.
simbabque

오이 was not off off : D
James Wood

1

메모장 ++에는 열 편집 기능이 내장되어 있으며 (,) 명령 (TextFX 플러그인) 명령을 사용하면 처음으로 올바른 그래픽 포인트 앤 클릭 솔루션을 제공합니다. 이렇게하면 정규식이나 셸 프로그래밍을 사용할 필요가 없습니다. 둘 다 일반적으로 원하는 것을 정확하게 수행 할 때까지 디버깅이 필요합니다.

시작점 : 열이 잘못 정렬 된 CSV 파일이므로 열별로 편집하기가 쉽지 않습니다 ...

    1,Value1,value2,value3,value4,value5
    3445,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234,Value1,value2,value3,value4,value5
    11,Value1,value2,value3,value4,value5
    ...

순서:

  1. 관심있는 행 (전체 파일)을 선택하십시오.

  2. 메뉴 명령 TextFX 사용> TextFX 편집> 여러 줄을 쉼표 (,)로 정렬하면 모든 행을 열별로 정렬하고 열을 쉽게 편집 할 수 있습니다.

    1    ,Value1,value2,value3,value4,value5
    3445 ,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234 ,Value1,value2,value3,value4,value5
    11   ,Value1,value2,value3,value4,value5
    
  3. 첫 번째 쉼표 (,) 뒤의 열에 열 모드 입력 소수의 행의 경우 키보드 명령 Alt + Shift + 아래쪽 화살표를 사용하십시오.
    많은 행 (큰 파일)에서 작업해야하는 경우 Alt + 마우스를 사용하고 첫 번째 행 의 원하는 열을 클릭 한 다음 파일의 마지막 행으로 이동하고 Alt + Shift를 클릭하고 동일한 열 위치를 클릭하십시오. ENTIRE 파일에서 열 모드가 활성화됩니다. 모든 쉼표 뒤에 세로 줄이 표시됩니다.

  4. 삭제 열 모드 제거합니다 문자의 전체 열을. 따라서 모든 행에서 첫 번째 쉼표 앞의 모든 것을 한 번에 삭제하여 얻을 수 있습니다.

    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    

끝난!

지금까지 제안 된 다양한 다른 솔루션과 비교 하여이 솔루션에 대해 언급하십시오.

열 모드 편집은 매우 강력하며 TextFX 플러그인 옵션과 함께 사용하면 다양한 상황에 포인트 앤 빠른 방식으로 적용됩니다.

예를 들어, 두 번째 열 또는 N 번째 열을 빠르게 삭제하기로 결정한 경우이 방법은 거의 수정없이 작동합니다.

반면에 정규 표현식, 쉘 스크립트는 목표를 달성 할 것입니다. 그러나 복잡한 문제에서는 구문을 "디버깅"하는 데 더 많은 시간을 소비하게됩니다.

메모장 ++의 다목적 내장 기능은 주요 장점 중 하나입니다. "프로그래밍"에 의존하지 않고도 상당한 힘을 얻습니다.


0

Notepad ++ 용 Python 콘솔 플러그인 에 익숙하다면 다른 방법을 조언 할 수 있습니다. 메모장 ++ 문서에 텍스트를 추가하고 콘솔에서 다음 스크립트를 실행해야합니다.

res = []
data = editor.getText().split('\r\n')
for i in data:
    res.append(i.split(',')[1:])

for i in res:
    editor.addText(', '.join(i)+'\r\n')

이 스크립트는 결과 텍스트를 현재 메모장 ++ 문서에 추가했습니다.


-1

vimEsc 키를 누르지 않으면 명령 모드에서 실행하십시오 .

첫 번째 열 제거 조치를 q키 에 맵핑하려면 다음 명령을 입력하십시오 .

:map q 0df,j0

다음을 의미합니다.

  • 0 -줄의 시작으로 이동
  • df,- D 까지 elete 모든 , 문자 (쉼표 포함)
  • j -한 줄 내려가
  • 0 -줄의 시작으로 이동

그런 다음이 조치를 모든 행에 적용하십시오.

:0,$ normal q

즉, q시작 (0)에서 끝 ($)까지 키에 지정된 조치를 실행하십시오 .


왜 하나의 전역 대체를 수행하지 :%s/^[^,]\+,//g않습니까?
연설자

당신도 할 수 있습니다. 이것은 정규 표현식보다는 사용하기 쉽고 이해하기 쉽습니다.
kenorb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.