Подтвердить что ты не робот

Как удалить символ в конце каждой строки в unix

Я хотел бы удалить запятую , в конце каждой строки в моем файле. Как это сделать, кроме использования функции подстроки в 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,
4b9b3361

Ответ 1

Вы можете использовать sed:

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

и удалить любой последний символ:

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

Ответ 2

Попробуйте сделать это:

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

Это более общий, чем просто удаление последней запятой, но любой последний символ

Если вы хотите удалить последнюю запятую только с awk:

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

Ответ 3

Код awk на основе RS.

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

или

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

Этот последний пример будет действителен для любого char перед новой строкой:

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

Примечание: точка . соответствует любому символу, кроме разрывов строк.

Объяснение

awk позволяет нам использовать разные разделители записей (строк) regex, нам просто нужно включить запятую перед разрывом строки (или dot для любого char) в том, что используется для input, RS.

Примечание: что означает 1?

Короткий ответ. Это просто ярлык, чтобы избежать использования оператора print. В awk, когда условие согласовывается, действие по умолчанию заключается в том, чтобы напечатать строку ввода, например:

$ echo "test" |awk '1'
test

Это потому, что 1 будет всегда true, поэтому это выражение эквивалентно:

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

Документация

Отметьте Запись разделения с помощью стандартного awk и Выходные разделители.

Ответ 4

альтернативные команды, выполняющие одно и то же задание

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

Ответ 5

Этот код Perl удаляет запятые в конце строки:

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

Этот параметр все еще работает, если после запятой есть пробел:

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

Этот вариант редактирует файл на месте:

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

Этот вариант редактирует файл на месте и создает резервную копию file.bak:

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