如何删除unix中每行末尾的字符

时间:2013-02-12 20:12:15

标签: unix awk

我想删除文件中每行末尾的逗号,。除了在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,

5 个答案:

答案 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用于dotinput任何字符。

注意RS的含义是什么?

简短回答,它只是避免使用1语句的捷径。 在print条件匹配时,默认操作是打印输入行,例如:

awk

那是因为$ echo "test" |awk '1' test 总是 true ,所以这个表达式相当于:

1

文档

检查 Record Splitting with Standard awkOutput Separators

答案 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