распечатайте последнее поле от строки + альтернатива для awk

В зависимости от того, как это будет используемым и Ваша версия удара, Вы, вероятно, были бы более обеспеченным использованием ассоциативного массива.

Приводя это к сбою, я предлагаю, чтобы Вы фальсифицировали тот.

Ради полноты можно на самом деле сделать это использование eval. Обратите внимание, что оценка опасна, и Вы не должны использовать это, если Вы не имеете к.

eval "${string/: /=\"}\""

3
02.04.2013, 21:03
4 ответа

Perl

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

Если необходимо разделить конечные пробелы сначала, сделайте это как это:

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

Следующее было внесено mr.spuratic в комментарии:

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

Bash

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

или bash не Ваша оболочка по умолчанию:

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
5
27.01.2020, 21:10
  • 1
    результата Для добавления к всестороннему списку: perl -an позволяет использование F выстройте как awk's $1, $2 и т.д., хотя это индексируется нулем и нет никакого специального предложения NF таким образом, Вы используете $F[-1] (или немного некрасивое $F[$#F]). –  mr.spuratic 02.04.2013, 13:07

Использование сокращения:

Последнее поле:

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

Последний знак:

echo 1 2 3 4 5 | rev | cut -c1
2
27.01.2020, 21:10
  • 1
    Да, но разве "поле" не является всем словом или числом? Попробуйте свою команду 51 вместо 5. Проверьте мой ответ. –  Emanuel Berg 02.04.2013, 18:20
  • 2
    Просто канал к rev снова в конце для поворачиваний назад. –  Skippy le Grand Gourou 25.11.2014, 19:05

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

2
27.01.2020, 21:10

Что-то вроде этого должно работать:

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

% echo 1 2 3 4 5 | sed -E -e 's/.* ([^ ]+)$/\1/'
5
0
27.01.2020, 21:10
  • 1
    не работает над моей solaris машиной - отзываются эхом 1 2 3 4 5 | sed-E-e 's/.* ([^] +) $/\1 /' sed: недопустимая опция - E –  yael 02.04.2013, 12:27
  • 2
    пробуют что-то вроде этого: sed -e 's/.* \([^ ]\{1,\}\)/\1/' Извините, у меня нет машины Соляриса для фактического тестирования его. –  gelraen 02.04.2013, 12:38

Теги

Похожие вопросы