珀尔

珀尔

由于我的 Solaris 机器上的技术原因,我无法使用awk来打印行中的最后一个字段。

awk打印行中最后一个字段(使用cuttr...等)的其他替代方法是什么?

示例1:

/usr/bin/hostname
machine1b
/usr/bin/hostname  | /usr/bin/sed 's/\(.\{1\}\)/\1 /g' |  /usr/bin/awk  '{print $NF}'
b

例2

echo 1 2 3 4 5 | /usr/bin/awk  '{print $NF}'

5

答案1

珀尔

echo foo bar baz | perl -pe 's/.*[ \t]//'

如果您必须先删除尾随空格,请按以下步骤操作:

echo "foo bar baz " | perl -lpe 's/\s*$//;s/.*\s//'

以下内容由以下人员贡献斯普拉蒂克先生在评论中:

echo "foo bar baz " | perl -lane 'print $F[-1]'

重击

echo foo bar baz | while read i; do echo ${i##* }; done

或者不是bash您的默认 shell:

echo foo bar baz | bash -c 'while read i; do echo ${i##* }; done'

如果您必须先删除单个尾随空格,请执行以下操作

echo "foo bar baz " | while read i; do i="${i% }"; echo ${i##* }; done

tr 和尾部

echo foo bar baz | tr ' ' '\n' | tail -n1

尽管与上面的解决方案相比,这仅适用于单行输入。在此方法中抑制尾随空格:

echo "foo bar baz " | tr ' ' '\n' | grep . | tail -n1

答案2

使用剪切:

最后一个字段:

echo 1 2 3 4 5 | rev | cut -f1 -d ' '

最后一个字符:

echo 1 2 3 4 5 | rev | cut -c1

答案3

echo hello my friend | tac -s' ' | tr '\n' ' ' | cut -d' ' -f 1

答案4

像这样的东西应该有效:

sed -E -e 's/.* ([^ ]+)$/\1/'

% echo 1 2 3 4 5 | sed -E -e 's/.* ([^ ]+)$/\1/'
5

相关内容