如何通过使用Unix删除最后一列之后的制表符分隔符

时间:2019-02-26 06:29:39

标签: unix awk sed

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

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,在最后一列之后。
如何删除它?

3 个答案:

答案 0 :(得分:0)

代替打印每个字段的“ 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

答案 1 :(得分:0)

首先是一个测试文件:

['82.4', '87.3', '92.5', '98.0', '103.8', '110.0', '116.5', '123.5', '130.8', '138.6', '146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1'] 
['110.0', '116.5', '123.5', '130.8', '138.6', '146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3'] 
['146.8', '155.6', '164.8', '174.6', '185.0', '196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3'] 
['196.0', '207.6', '220.0', '233.1', '246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9'] 
['246.9', '261.6', '277.2', '293.6', '311.1', '329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9', '783.9', '830.5', '879.9', '932.2'] 
['329.6', '349.2', '370.0', '392.0', '415.3', '440.0', '466.1', '493.8', '523.2', '554.3', '587.3', '622.2', '659.2', '698.4', '739.9', '783.9', '830.5', '879.9', '932.2', '987.7', '1046.4', '1108.6', '1174.6', '1244.4']

还有awk:

$ cat > foo
1
2
3

输出:

$ 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

答案 2 :(得分:0)

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