如何执行`xargs`的反转?

Ste*_* Lu 14 unix linux bash

我有一个我要反转的数字列表.

它们已经排序了.

35 53 102 342

我要这个:

342 102 53 35

所以我想到了这个:

echo $NUMBERS | ??? | tac | xargs

什么是???

它应该将空格分隔列表转换为行分隔列表.

我想避免设置IFS.

也许我可以使用bash数组,但是我希望有一个命令,其生命的目的是与xargs相反(也许xargs不仅仅是一个小技巧!)

Mat*_*Mat 18

你可以用printf它.例如:

$ printf "%s\n" 35 53 102 342
35
53
102
342
$ printf "%s\n" 35 53 102 342|tac
342
102
53
35
Run Code Online (Sandbox Code Playgroud)

  • 最好使用%s,这样如果数字包含小数点或太大,它就不会中断. (3认同)
  • 哇.这就是我所说的惊喜. (2认同)

Ken*_*ent 8

没有tac的awk单行:

awk '{NF++;while(NF-->1)print $NF}'
Run Code Online (Sandbox Code Playgroud)

例如:

kent$  echo "35 53 102 342"|awk '{NF++;while(NF-->1)print $NF}'
342
102
53
35
Run Code Online (Sandbox Code Playgroud)


bag*_*gzy 8

另一个答案(容易记住但不如printf方法快):

$ xargs -n 1 echo
Run Code Online (Sandbox Code Playgroud)

例如

$ NUMBERS="35 53 102 342"
$ echo $NUMBERS | xargs -n 1 echo | tac | xargs
342 102 53 35
Run Code Online (Sandbox Code Playgroud)


use*_*001 5

另一种选择是使用Bash字符串操作

$ numbers="35 53 102 342"
$ echo "${numbers// /$'\n'}"
35
53
102
342
$ echo "${numbers// /$'\n'}" | tac
342
102
53
35
Run Code Online (Sandbox Code Playgroud)