在列中打印列表/数组

时间:2015-04-28 16:08:36

标签: shell fish

我有列表/数组,例如$ PATH env变量,当你执行echo $PATH打印时

/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin /usr/local/MacGPG2/bin /usr/texbin /usr/local/go/bin

我希望将其格式化为如下所示的列,因此不必向上滚动太多。 $PATH变量只是一个示例,我希望能够使用任何列表。

/usr/local/bin /usr/sbin    /usr/local/MacGPG2/bin
/usr/bin       /sbin        /usr/texbin
/bin           /opt/X11/bin /usr/local/go/bin

我可以使用for循环打印新行中列表中的每个项目,但无法找到执行多列的方法。我知道有一个列命令,但似乎没有做任何事情。我尝试了echo $PATH | column -c 5

等所有选项

2 个答案:

答案 0 :(得分:1)

在这里:传递变量名称以及您想要的列数

$ function columnize -a listvarname -a ncols
      test (count $ncols) -eq 1; or set ncols 1
      printf "%s\n" $$listvarname | \
      eval paste (yes - | head -n $ncols | tr '\n' " ") | \
      column -t
  end 

使用非特殊列表名称的演示。

$ set list /usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin /usr/local/MacGPG2/bin /usr/texbin /usr/local/go/bin

$ columnize list 3
/usr/local/bin          /usr/bin     /bin
/usr/sbin               /sbin        /opt/X11/bin
/usr/local/MacGPG2/bin  /usr/texbin  /usr/local/go/bin

$ columnize list 5
/usr/local/bin  /usr/bin                /bin         /usr/sbin          /sbin
/opt/X11/bin    /usr/local/MacGPG2/bin  /usr/texbin  /usr/local/go/bin

$ columnize list 
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
/usr/local/MacGPG2/bin
/usr/texbin
/usr/local/go/bin

答案 1 :(得分:0)

试试这个:

echo $PATH|sed 's/ /\
/g'|column -xt -c5

注意:在\确保后面有一个新行