如何删除unix中每行末尾的字符
我想删除我的文件中每行的结尾处的逗号。 除了在awk
使用substring函数,我怎么能做到这一点。 请给我build议。谢谢
示例input
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
基于RS
的awk
代码
awk '1' RS=',\n' file
要么:
awk 'BEGIN{RS=",\n"}1' file
最后一个例子在换行之前的任何字符都是有效的:
awk '1' RS='.\n' file
注意 : 点 .
匹配除换行符之外的任何字符。
说明
awk
允许我们使用不同的logging(行) regex
分隔符,我们只需要在用于input
的RS
(或任何字符的dot
)之前包括逗号RS
。
注意 :那是什么意思?
简短的回答 ,这只是一个避免使用print
语句的捷径。 在awk
当条件匹配时,缺省操作是打印input行,例如:
$ echo "test" |awk '1' test
那是因为1
总会是真的 ,所以这个expression式相当于:
$ echo "test"|awk '1==1' test $ echo "test"|awk '{if (1==1){print}}' test
文档
使用标准awk和输出分隔符 检查 logging拆分 。
执行相同工作的替代命令
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