开发者

Unix cut command taking an unordered list as arguments

The Unix cut command takes a list of fields, but not the order that I need it in.

$ echo 1,2,3,4,5,6 |开发者_JS百科 cut -d, -f 1,2,3,5
1,2,3,5

$ echo 1,2,3,4,5,6 | cut -d, -f 1,3,2,5
1,2,3,5

However, I would like a Unix shell command that will give me the fields in the order that I specify.


Use:

pax> echo 1,2,3,4,5,6 | awk -F, 'BEGIN {OFS=","}{print $1,$3,$2,$5}'
1,3,2,5

or:

pax> echo 1,2,3,4,5,6 | awk -F, -vOFS=, '{print $1,$3,$2,$5}'
1,3,2,5


Or just use the shell

$ set -f
$ string="1,2,3,4,5"
$ IFS=","
$ set -- $string
$ echo $1 $3 $2 $5
1 3 2 5


Awk based solution is elegant. Here is a perl based solution:

echo 1,2,3,4,5,6 | perl -e '@order=(1,3,2,5);@a=split/,/,<>;for(@order){print $a[$_-1];}'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜