首页 > 解决方案 > Bash 脚本:从特定单词/字符串的单字符串生成 2 列

问题描述

我正在尝试从单个字符串生成一个包含 2 列的表。

例子:

(来自字符串)

*Col1*
a:axx
b:bxxxx
c:cx
*Col2*
d:dxx
e:exxxx

(输出)

*Col1*               *Col2*
a    axx             d     dxx
b    bxxxx           e     exxxx
c    cx

我已经使用printf "str" | column -t -s ':'它来生成一个表格,将 1 列中的所有内容都对齐,但我不知道如何将字符串的一部分对齐为第二列。

我查找了多个变体,例如awkand paste,但我仍然不明白如何正确添加它们

编辑1:忘了提到值的长度并不相同

标签: bashawkmultiple-columns

解决方案


awk救援!

$ echo "$value" | 
  awk -v OFS='\t' '
    /\*.*\*/ {c=0;n++;$0=$0 OFS}
             {a[++c,n]=$0} 
    max<c    {max=c} 
    END      {for(i=1;i<=max;i++) 
                for(j=1;j<=n;j++) 
                   {sub(/:/,OFS,a[i,j]); 
                    printf "%s",a[i,j] (j==n?ORS:OFS)}}'


*Col1*          *Col2*
a       a       d       d
b       b       e       e
c       c

但最好让column表格格式化,只需将上面的内容传递给

... | column -nts$'\t'

这样它就可以处理不均匀的字长。与更新的输入文件一起使用将给出

*Col1*         *Col2*
a       axx    d       dxx
b       bxxxx  e       exxxx
c       cx

推荐阅读