Awk:删除行中最后一个空格后的文本

时间:2015-04-25 10:11:21

标签: linux bash text awk text-processing

我有一个制表符分隔的文本文件,格式如下。

Col1  | Col2  | Col3
123.0 | 534.2 | Blah0 2031/23/12
23.00 | 786.2 | Blah1 2033/01/01
12.40 | 343.0 | Blah2 2031/27/11

我需要删除最后一列空格后的所有字符。所以我的输出将是

Col1  | Col2  | Col3
123.0 | 534.2 | Blah0
23.00 | 786.2 | Blah1
12.40 | 343.0 | Blah2

我应该如何使用Awk或类似的东西来解决这个问题?

1 个答案:

答案 0 :(得分:4)

使用awk:

awk -F '\t' 'BEGIN { OFS = FS } NR != 1 { sub(/ [^ ]*$/, "", $NF) } 1' filename

那是:

BEGIN { OFS = FS }           # the output should be separated the same way as
                             # the input

NR != 1 {                    # in all lines except the header line:
  sub(/ [^ ]*$/, "", $NF)    # replace the last space and everything after it
}                            # in the last field ($NF)  with the empty string
                             # (i.e., remove it)

1                            # in all lines: print.

如果最后一个字段中有多个空格,并且您想删除第一个空格后的所有内容,请改用sub(/ .*/, "", $NF)。在这个问题中,在这样的情况下应该发生什么事情并不完全清楚。