You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl脚本终端实时表格生成:多行输出转等宽列格式需求

解决Perl脚本终端输出等宽列的问题

嘿,我来帮你搞定这个Perl脚本格式化输出的需求!你现在的输出是一串连续的用户信息,想要把它们拆分成整齐的等宽列展示对吧?下面是具体的实现方案:

核心思路

首先我们需要把连续的字符串拆分成单个用户的记录,然后计算每个字段(姓名、姓氏、年龄)所需的最大宽度,最后用格式化输出的方式让每一列保持等宽对齐。

完整代码示例

#!/usr/bin/perl
use strict;
use warnings;

# 替换成你实际的终端输入数据,或者改成从STDIN读取
my $raw_data = "Name: Paul Surname: Doe Age:34 Name: Paulo Surname: Doeson Age:28 Name: Paulinho Surname: Docsone Age:5 Name: Paulmen Surname: Doee Age:12 Name: Paulchen Surname: Dooe Age:31";

# 1. 拆分数据为用户记录数组
my @users;
# 用正则匹配每个用户的Name/Surname/Age组合
while ($raw_data =~ /Name: (\S+) Surname: (\S+) Age:(\d+)/g) {
    push @users, {
        name    => $1,
        surname => $2,
        age     => $3,
    };
}

# 2. 计算每个字段的最大宽度(包含字段名的长度,确保列对齐)
my $max_name_len = length("Name: ") + (sort { length($b) <=> length($a) } map { $_->{name} } @users)[0];
my $max_surname_len = length("Surname: ") + (sort { length($b) <=> length($a) } map { $_->{surname} } @users)[0];
my $max_age_len = length("Age: ") + (sort { length($b) <=> length($a) } map { $_->{age} } @users)[0];

# 3. 定义格式化模板,左对齐保证列整齐
my $format = "%-${max_name_len}s %-${max_surname_len}s %-${max_age_len}s\n";

# 可选:输出表头和分隔线,让表格更清晰
printf $format, "Name:", "Surname:", "Age:";
printf "%s %s %s\n", '-' x $max_name_len, '-' x $max_surname_len, '-' x $max_age_len;

# 4. 逐行输出每个用户的信息
foreach my $user (@users) {
    printf $format,
        "Name: $user->{name}",
        "Surname: $user->{surname}",
        "Age: $user->{age}";
}

代码说明

  • 数据拆分:使用正则表达式/Name: (\S+) Surname: (\S+) Age:(\d+)/g循环捕获每个用户的三个字段,把它们存进哈希表数组里,方便后续处理。
  • 宽度计算:通过排序找出每个字段值的最长长度,加上字段名本身的长度(比如Name: 是6个字符),得到每列需要的最大宽度。
  • 格式化输出:用sprintf的%-Ns语法实现左对齐,确保每列的内容都占据相同宽度,不管内容长短都能整齐排列。

适配终端输入的修改

如果你的数据是从终端逐行读取(比如用户输入或者管道传输),可以把数据读取部分改成这样:

# 从标准输入读取数据
my @users;
while (my $line = <STDIN>) {
    chomp $line;
    # 同样用正则捕获每行里的用户信息
    while ($line =~ /Name: (\S+) Surname: (\S+) Age:(\d+)/g) {
        push @users, { name => $1, surname => $2, age => $3 };
    }
}

这样运行脚本后,终端输出就会变成整齐的等宽列啦!

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:26:15