bash - 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 列中的所有内容都对齐,但我不知道如何将字符串的一部分对齐为第二列。
我查找了多个变体,例如awk
and paste
,但我仍然不明白如何正确添加它们
编辑1:忘了提到值的长度并不相同
解决方案
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