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

Tej*_*eja 58 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,
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)

  • @ ubuntu101010101确实但使用此选项可能会触发"sed"错误.问题是标记为Unix.使用非POSIX GNUism会使我的建议不可移植. (2认同)

Jua*_*doy 6

基于的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任何在一个用于焦炭)inputRS.

注意:这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)

文档

使用标准awk输出分隔符检查记录拆分.