Nice programing

Unix에서 각 줄 끝의 문자를 제거하는 방법

nicepro 2020. 12. 28. 22:33
반응형

Unix에서 각 줄 끝의 문자를 제거하는 방법


,내 파일의 각 줄 끝에서 쉼표를 제거 하고 싶습니다. .NET에서 하위 문자열 함수를 사용하는 것 외에 어떻게 할 수 있습니까 awk? 저를 제안하십시오.

샘플 입력

        SUPPLIER_PROC_ID BIGINT NOT NULL,
        BTCH_NBR INTEGER NOT NULL,
        RX_BTCH_SUPPLIER_SEQ_NBR INTEGER NOT NULL,
        CORRN_ID INTEGER NOT NULL,
        RX_CNT BYTEINT NOT NULL,
        DATA_TYP_CD BYTEINT NOT NULL,
        DATA_PD_CD BYTEINT NOT NULL,
        CYC_DT DATE NOT NULL,
        BASE_DT DATE NOT NULL,
        DATA_LOAD_DT DATE NOT NULL,
        DATA_DT DATE NOT NULL,
        SUPPLIER_DATA_SRC_CD BYTEINT NOT NULL,
        RX_CHNL_CD BYTEINT NOT NULL,
        MP_IMS_ID INTEGER NOT NULL,
        MP_LOC_ID NUMERIC(3,0),
        MP_IMS_ID_ACTN_CD BYTEINT NOT NULL,
        NPI_ID BIGINT,

sed를 사용할 수 있습니다.

sed 's/,$//' file > file.nocomma

마지막 문자를 제거하려면 :

sed 's/.$//' file > file.nolast

이것을 시도하십시오 :

awk '{print substr($0, 1, length($0)-1)}' file.txt

이것은 마지막 쉼표를 제거하고 마지막 문자를 제거하는 것보다 더 일반적입니다.

awk로 마지막 쉼표 만 제거하려면 다음을 수행하십시오.

awk '{gsub(/,$/,""); print}' file.txt

awk코드를 기반으로 RS.

awk '1' RS=',\n' file

또는:

awk 'BEGIN{RS=",\n"}1' file

이 마지막 예제는 개행 문자 앞에 있는 모든 문자에 유효합니다 .

awk '1' RS='.\n' file

참고 : .줄 바꿈을 제외한 모든 문자와 일치합니다 .

설명

awk우리가 다른 레코드 (라인) 사용할 수 있습니다 regex분리기, 우리는 단지 앞에 쉼표 포함 할 필요가 줄 바꿈 (나 dot에 대한 어떤 에 사용되는 하나의 문자) input의를 RS.

참고 : 그게 무슨 1뜻입니까?

짧은 대답 , print문장 사용을 피하는 지름길 일뿐 입니다. 에서 awk조건이 일치됩니다 때 기본 동작은 입력 라인, 예를 인쇄하는 것입니다 :

$ echo "test" |awk '1'
test

때문이다 1항상있을 것입니다 사실 이 표현은 동일합니다, 그래서 :

$ echo "test"|awk '1==1'
test
$ echo "test"|awk '{if (1==1){print}}'
test

선적 서류 비치

표준 awk출력 구분자로 레코드 분할을 확인합니다 .


동일한 작업을 수행하는 대체 명령

tr -d ",$" < infile
awk 'gsub(",$","")' infile

This Perl code removes commas at the end of the line:

perl -pe 's/,$//' file > file.nocomma

This variation still works if there is whitespace after the comma:

perl -lpe 's/,\s*$//' file > file.nocomma

This variation edits the file in-place:

perl -i -lpe 's/,\s*$//' file

This variation edits the file in-place, and makes a backup file.bak:

perl -i.bak -lpe 's/,\s*$//' file

ReferenceURL : https://stackoverflow.com/questions/14840953/how-to-remove-a-character-at-the-end-of-each-line-in-unix

반응형