首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash打印具有不同数量的值的列

Bash打印具有不同数量的值的列
EN

Stack Overflow用户
提问于 2020-02-26 01:22:51
回答 2查看 51关注 0票数 0

我正在尝试创建一个报告,它从原始的源文件中分解不同的依赖文件,然后将其输出到一个包含列的报告中。到目前为止,我可以获得要生成的文件列表,但第四列是唯一具有多个值的列,下面是我得到的结果:

代码语言:javascript
复制
file='foo.rcf'
gen_file='foo2.rcf'
fs_file='foo3.rcf'
item_file='foo4.rcf
foo5.rcf
foo6.rcf
foo7.rcf'

paste <(printf %s "$file |") <(printf %s "$fs_file |") <(printf %s "$gen_file |") <(printf "%10s\n""$item_file")

输出:

代码语言:javascript
复制
foo.rcf |       foo3.rcf |      foo2.rcf |      foo4.rcf
                        foo5.rcf
                        foo6.rcf
                        foo7.rcf

我希望能够输出的东西是这样的:

代码语言:javascript
复制
foo.rcf |       foo3.rcf |      foo2.rcf |      foo4.rcf
        |                |               |      foo5.rcf
        |                |               |      foo6.rcf
        |                |               |      foo7.rcf

bash解决方案会很棒,但我现在真的在寻找任何解决方案。

EN

回答 2

Stack Overflow用户

发布于 2020-02-26 03:04:12

使用column。首先使用paste,使用分隔符连接各行,然后使用column对输出进行列化,其中字段由分隔符分隔:

代码语言:javascript
复制
file='foo.rcf'
gen_file='foo2.rcf'
fs_file='foo3.rcf'
item_file='foo4.rcf
foo5.rcf
foo6.rcf
foo7.rcf'

paste -d'|' <(
    printf %s "$file") <(
    printf %s "$fs_file") <(
    printf %s "$gen_file") <(
    printf %s "$item_file") |
column -t -s '|' -o ' |     '

将输出:

代码语言:javascript
复制
foo.rcf |     foo3.rcf |     foo2.rcf |     foo4.rcf
        |              |              |     foo5.rcf
        |              |              |     foo6.rcf
        |              |              |     foo7.rcf
票数 1
EN

Stack Overflow用户

发布于 2020-02-26 02:37:14

您可以使用awk:

代码语言:javascript
复制
file='foo.rcf'
gen_file='foo2.rcf'
fs_file='foo3.rcf'
item_file='foo4.rcf
foo5.rcf
foo6.rcf
foo7.rcf'

# Lets concatenate the string with separators:
printf "$file|$fs_file|$gen_file|$item_file" |
# Sending modified string to awk with pipe---^
# awk can split it with -F parameter and insert tabs between the chunks.
awk -F'|' 'NR==1 {
    print $1"\t\t|\t"$2"\t|\t"$3"\t|\t"$4
} NR>1 { 
    print "\t\t|\t\t\t|\t\t\t|\t"$1  }'
# -F defines a separator, NR is line number.

输出:

代码语言:javascript
复制
foo.rcf     |   foo3.rcf    |   foo2.rcf    |   foo4.rcf
            |               |               |   foo5.rcf
            |               |               |   foo6.rcf
            |               |               |   foo7.rcf
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60400119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档