不使用sed或awk,只cut,当字段的数量未知或随每一行变化时,我如何得到最后一个字段?


当前回答

选择1

choose支持负索引(语法类似于Python的切片)。

其他回答

这是唯一可能的解决方案,只使用切割:

回声“s.t.r.i.n.g。”| cut -d'。- f2 - [repeat_following_part_forever_or_until_out_of_memory:] | cut -d'。- f2 -

使用此解决方案,字段的数量确实可以是未知的,并且随时变化。但是,由于行长不能超过LINE_MAX字符或字段(包括新行字符),那么任意数量的字段永远不能作为该解决方案的实际条件。

是的,一个非常愚蠢的解决方案,但我认为这是唯一符合标准的解决方案。

我意识到,如果我们只是确保后面的分隔符存在,它就可以工作。在我的例子中,我有逗号和空格分隔符。我在结尾加了一个空格;

$ ans="a, b"
$ ans+=" "; echo ${ans} | tr ',' ' ' | tr -s ' ' | cut -d' ' -f2
b

在处理表格数据时最好使用awk。你不需要听从命令。如果awk可以实现,为什么不使用它呢?我建议您不要浪费宝贵的时间,只需使用少量命令就可以完成工作。

例子:

# $NF refers to the last column in awk
ll | awk '{print $NF}'

如果你有一个名为fillist .txt的文件,它是一个列表路径,如下所示: c: / dir1 dir2 / file1.h c: / dir1 dir2 / dir3 / file2.h

然后你可以这样做: Rev fillist .txt | cut -d"/" -f1 | Rev

使用perl的替代方法是:

perl -pe 's/(.*) (.*)$/$2/' file

在哪里您可以改变\t为任何分隔符的文件是