Ответ 1
Вы можете использовать sed:
sed 's/,$//' file > file.nocomma
и удалить любой последний символ:
sed 's/.$//' file > file.nolast
Я хотел бы удалить запятую ,
в конце каждой строки в моем файле. Как это сделать, кроме использования функции подстроки в 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
Этот последний пример будет действителен для любого 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 и Выходные разделители.
альтернативные команды, выполняющие одно и то же задание
tr -d ",$" < infile
awk 'gsub(",$","")' infile
Этот код 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