2016-06-24 2 views
1

다음과 같이 쉼표로 구분 된 파일 (CSV 파일) test.csv이 있습니다. CSV 파일의 두 번째 및 세 번째 행에서만 쉼표를 제거하십시오.

FHEAD,1,2,3,,,,,, 
FDEP,2,3,,,,,,,, 
FCLS,3,,,4-5,,,,,,, 
FDETL,4,5,6,7,8, 
FTAIL,5,67,,,,,, 

는 내가 기록은 내가 빈 열을 제거하고 싶어하는 행에 FDEPFCLS 시작했다 파일 만 즉의 2 층과 3 행에서 빈 열을 제거하고 싶어 (,,).

빈 열을 제거한 후 같은 파일 test.csv 내가 유닉스에서이 작업을 수행 할 수있는 방법

FHEAD,1,2,3,,,,,, 
FDEP,2,3 
FCLS,3,4-5 
FDETL,4,5,6,7,8, 
FTAIL,5,67,,,,,, 

같이한다 ???

+0

이 업데이트는 무엇입니까? – teepu

+1

와우, 너 게으름쟁이 야. 당신은 어떤 노력도 기울이지 않았습니다. 그냥 "이 코드를 써주세요!" 및 "모든 업데이트?" – melpomene

답변

1

여기에 나오지도 사용을 할 수있는 하나 개의 방법 :

sed '/^F\(DEP\|CLS\),/ { s/,\{2,\}/,/g; s/,$// }' 

우리는 즉, 다음과 같은 명령은 공정 라인이 ^F\(DEP\|CLS\), 일치하는 것, /^F\(DEP\|CLS\),/의 범위를 사용합니다. 이 정규 표현식은 F 다음에 DEP 또는 CLS 다음에 ,이 오는 문자열의 시작과 일치합니다. 즉, FDEP, 또는 FCLS,으로 시작하는 줄을 찾습니다.

같은 라인을 발견하는 데, 우리는 먼저 대체 ( s 명령) 모든 실행 한 ,에 의한 행의 2 이상 ( \{2,\}) 쉼표 ( ,)의 (가능한 g 플래그, 경기를 여러 번). 이것은 ,,,을 하나의 ,으로 압축합니다.

두 번째로, 문자열의 끝에서 아무것도 대체하지 않고 ,으로 대체합니다. 이것은 뒤에 오는 쉼표를 제거합니다.

관련 문제