【问题标题】:How to remove the tab delimiter after the last column by using unix如何使用unix删除最后一列后的制表符分隔符
【发布时间】:2019-02-26 06:29:38
【问题描述】:

我有一个制表符分隔的文件。我正在使用以下代码:

awk -v var="MAS_CONTROL_WL_column_nmbr.dat" 'BEGIN{RS="\n"}
{ while(getline line < var){ printf("%s\t",$line)};close(var);
printf( "\n") }' MAS_CONTROL_WL.tsv > test.tsv

此代码打印列号文件中存在的列号,但我面临的问题是 \t 出现在最后一列之后。
怎么去掉?

【问题讨论】:

  • 显示一些示例数据会更好,column_nmber 文件中的内容,tsv 文件中的内容。还有你的预期输出。

标签: unix awk sed


【解决方案1】:

首先是一个测试文件:

$ cat > foo
1
2
3

还有 awk:

$ awk -v var=foo '
BEGIN { RS="\n" }
{ 
    out=""                                              # introducing output buffer
    while(getline line < var) {
        out=out sprintf("%s%s",(out==""?"":"\t"),line)  # controlling tabs
    }
    close(var)
    print out                                           # output output buffer
}' foo | cat -T                                         # useful use of cat

输出:

1^I2^I3
1^I2^I3
1^I2^I3

【讨论】:

    【解决方案2】:

    不是为每个字段打印“field-tab”,而是打印第一个没有标签的字段,然后将其余字段附加为“tab-field”:

    awk -v var="MAS_CONTROL_WL_column_nmbr.dat" '
        BEGIN{RS="\n"}
        {
            if (getline line < var) printf("%s",$line);
            while (getline line < var) printf("\t%s",$line);
            close(var);
            printf( "\n");
        }
    ' MAS_CONTROL_WL.tsv > test.tsv
    

    【讨论】:

      【解决方案3】:

      如果您仍然需要原始问题的答案(在最后一列之后删除 \t):sed -i 's/[[:space:]]$//' your_file.tsv 将删除文件行末尾的空白。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 2018-05-25
        • 2016-05-27
        相关资源
        最近更新 更多