18

逆にしたい数字のリストがあります。

それらはすでにソートされています。

35 53 102 342

これ欲しい:

342 102 53 35

だから私はこれを考えました:

echo $NUMBERS | ??? | tac | xargs

なに???

スペース区切りのリストを行区切りのリストに変換する必要があります。

設定するのは避けたいIFSです。

多分私はbash配列を使用することができますが、人生の目的がxargsの反対を行うことであるコマンドがあることを望んでいました(おそらくxargsは複数のトリックポニーです!!)

4

8 に答える 8

23

そのために使えますprintf。例えば:

$ printf "%s\n" 35 53 102 342
35
53
102
342
$ printf "%s\n" 35 53 102 342|tac
342
102
53
35
于 2013-08-09T15:29:08.133 に答える
8

tac なしの awk ワンライナー:

awk '{NF++;while(NF-->1)print $NF}'

例えば:

kent$  echo "35 53 102 342"|awk '{NF++;while(NF-->1)print $NF}'
342
102
53
35
于 2013-08-09T15:37:53.393 に答える
5

別のオプションは、Bash 文字列操作を使用することです

$ numbers="35 53 102 342"
$ echo "${numbers// /$'\n'}"
35
53
102
342
$ echo "${numbers// /$'\n'}" | tac
342
102
53
35
于 2013-08-09T15:33:18.087 に答える
3

さて、あなたは書くことができます:

echo $(printf '%s\n' $NUMBERS | tac)

whereは、それぞれの後に改行を付けてprintf '%s\n' ...出力します。これは組み込み機能であり、ほとんど不要です。...$( ... )xargs

ただし、配列などの使用を避けるべきではないと思いますIFS。バグや予期しない入力に直面しても、スクリプトをより堅牢にします。

于 2013-08-09T15:29:39.790 に答える
3

を使用した回答はたくさんありますtacが、並べ替えを使用したい場合は、ほとんど同じです。

printf "%s\n" 1 2 3 4 5 10 12 | sort -rn

n数値でソートするので重要です。r逆です。

于 2013-08-09T16:00:28.900 に答える
2

リストを でソートした場合は、逆のオプションsortを検討するかもしれません-r

于 2013-08-09T15:33:26.767 に答える