我想删除,
文件中每行末尾的逗号.除了使用子字符串函数之外,我该怎么做呢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,
Run Code Online (Sandbox Code Playgroud)
Gil*_*not 77
试着这样做:
awk '{print substr($0, 1, length($0)-1)}' file.txt
Run Code Online (Sandbox Code Playgroud)
这比删除最后一个逗号但任何最后一个字符更通用
如果你只想用awk删除最后一个逗号:
awk '{gsub(/,$/,""); print}' file.txt
Run Code Online (Sandbox Code Playgroud)
jll*_*gre 57
你可以使用sed:
sed 's/,$//' file > file.nocomma
Run Code Online (Sandbox Code Playgroud)
并删除最后一个字符:
sed 's/.$//' file > file.nolast
Run Code Online (Sandbox Code Playgroud)
基于的awk
代码RS
.
awk '1' RS=',\n' file
Run Code Online (Sandbox Code Playgroud)
要么:
awk 'BEGIN{RS=",\n"}1' file
Run Code Online (Sandbox Code Playgroud)
最后一个示例对换行前的任何字符都有效:
awk '1' RS='.\n' file
Run Code Online (Sandbox Code Playgroud)
注意:点 .
匹配除换行符之外的任何字符.
说明
awk
允许我们使用不同的记录(行)regex
分隔符,我们只需要包含逗号之前断行(或dot
为任何在一个用于焦炭)input
的RS
.
注意:这1
意味着什么?
简短的回答,这只是避免使用该print
语句的捷径.在awk
条件匹配时,默认操作是打印输入行,例如:
$ echo "test" |awk '1'
test
Run Code Online (Sandbox Code Playgroud)
那是因为1
将永远是真的,所以这个表达式相当于:
$ echo "test"|awk '1==1'
test
$ echo "test"|awk '{if (1==1){print}}'
test
Run Code Online (Sandbox Code Playgroud)
文档