我想删除文件中每行末尾的逗号,
。除了在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,
答案 0 :(得分:76)
尝试这样做:
awk '{print substr($0, 1, length($0)-1)}' file.txt
这比删除最后一个逗号但任何最后一个字符
更通用如果您只想用awk删除最后一个逗号:
awk '{gsub(/,$/,""); print}' file.txt
答案 1 :(得分:48)
您可以使用sed:
sed 's/,$//' file > file.nocomma
并删除最后一个字符:
sed 's/.$//' file > file.nolast
答案 2 :(得分:6)
基于awk
的{{1}}代码。
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
总是 true ,所以这个表达式相当于:
1
文档
答案 3 :(得分:1)
执行相同工作的替代命令
tr -d ",$" < infile
awk 'gsub(",$","")' infile
答案 4 :(得分:0)
此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