由于我的 Solaris 机器上的技术原因,我无法使用awk
来打印行中的最后一个字段。
awk
打印行中最后一个字段(使用cut
或tr
...等)的其他替代方法是什么?
示例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