web-dev-qa-db-ja.com

bashで数字からなる文字列を逆にする方法は?

数字で数字を表示する最良の方法は何ですか?

例えば。

$ echo 123 | hook
321
$ echo 12358 | hook
85321 
6
Anomalous Awe
:~> echo 123456 | rev
654321

うまくいくはずです。使い方はかなり簡単です。男から:

名前
rev-ファイルの行を反転

あらすじ
rev [ファイル...]

説明
revユーティリティは、指定されたファイルを標準出力にコピーし、各行の文字の順序を逆にします。ファイルが指定されていない場合は、標準入力が読み取られます。

利用できない場合は、awkも使用できるはずです。

:~> echo 123456 | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}'
654321

ソース NIXスクール

最終的にファイルを完全に反転する必要がある場合は、次のようにtacrevコマンドラインに追加できます。

tac myfile | rev 
11
Kiwy

bashに限定されない場合、zshを使用:

forward=123
backward=${(j::)${(Oas::)forward}}

それらは可変拡張フラグです:

  • s:::空の文字列で分割するため、文字ごとに1つの要素
  • Oa:結果の配列を逆にします(逆順の場合はO、配列の添字順の場合はa)。
  • j:::空の文字列で要素を結合します。
6

revをお探しですか?

echo 123|rev
321
2
user55518
#!/bin/bash
#set -xv

string="$1"
reverse_string=""
string_length="${#string}"

while (( "$string_length">=1 )) 
do
     string_length=$(( $string_length - 1 ))
     reverse_string="$reverse_string${string:$string_length:1}"
done

echo "$reverse_string"

ファイルを実行可能にする

$ chmod +x reverse_string
$ ./reverse_string 123456789    
98765432    
2
Tasos

revは明白で、おそらく最良の答えです。ただし、revは常にデフォルトでインストールされるわけではありません。 coreutilsだけでこれを実行したい場合は、このより長いコマンドを使用できます。

echo 123 | fold -w1 | tac | paste -d '' -s -
  • fold -w1は、各桁を行に配置します
  • tacは逆のcatです。つまり、行の順序を逆にします
  • paste -d '' -s -は、各行の数字を連続して1行に貼り付けます。
2
Digital Trauma