파일의 열이 끝에 있으면 쉼표를 제거합니다.

파일의 열이 끝에 있으면 쉼표를 제거합니다.

19개의 열이 있는 탭으로 구분된 파일이 있는데 그 중 일부 끝에는 쉼표가 포함되어 있습니다. 이 쉼표가 끝에 있으면 모든 열에서 제거하고 싶습니다. 예:

c1   c2   c3   c4   c5  
re,  f,f   d,f,  gf   mk
df   df,  df   dl,  df,

결과는 다음과 같은 파일에 저장되어야 합니다.

c1   c2    c3    c4   c5  
re   f,f   d,f   gf   mk
df   df    df    dl   df

답변1

다음을 수행할 수 있습니다.

perl -i -pe 's/,(\t|$)/$1/g' file

그러면 쉼표 뒤에 공백, 탭 또는 개행 문자가 제거됩니다.

예를 들어 다른 필드 구분 기호의 경우 다음을 :사용합니다.

perl -i -F: -lane 's/,$// for @F; print join ":",@F' file

이 명령은 원본 파일을 변경합니다, 먼저 삭제 -i하고 테스트해 보세요.

답변2

각 필드 끝에 있는 단일 쉼표를 제거하려면 다음을 수행하십시오.

perl -i -pe 's/,(\t|$)/$1/g' myfile

(\t|$)탭 문자 또는 줄 끝과 일치합니다. s/…/…/g패턴의 각 발생(here ,(\t|$))을 지정된 대체 텍스트(here $1, 패턴의 대괄호로 묶인 부분을 나타냄)로 바꿉니다. 쉼표로 끝나지 않는 필드는 패턴과 일치하지 않으므로 변경되지 않고 인쇄됩니다.

이것-p옵션Perl에게 주어진 표현식을 각 입력 라인에 적용하고 수정된 라인을 인쇄하도록 지시합니다. 이것-i옵션입력 파일이 결과 출력으로 대체됩니다.

답변3

다음은 훌륭한 둘러보기 콘텐츠입니다..

perl -i -pe 's/,(?=\t|$)//g' file

또는

perl -i -pe 's/,(?!\S)//g' file

또는

단어가 아닌 경계를 사용하십시오..

perl -i -pe 's/,\B//g' file

관련 정보