真珠

真珠

awk私のSolarisシステムの技術的な理由から、行の最後のフィールドを印刷するために使用することはできません。

awk1行の最後のフィールドを印刷する(cutまたは... etcを使用する)他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デフォルトのシェルではありません。

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

関連情報