0

我们如何使用printf命令在 shell 中阻止字符串的特定空间,例如结果是

tom@x.com 10
john@x.com 11
andrew@x.com 12
thomas_sean@x.com 15

我们如何以正确的方式对齐这个结果,因为我在编码中使用的命令是

printf $user$i $time

期望的结果是

tom@x.com          10
john@x.com         11
andrew@x.com       12
thomas_sean@x.com  15

我的代码如下 -

    echo $h | cut -f$a -d" " 

`printf "\t${t[$a]}\t\t $hour:$min:$sec\n"` 
4

3 回答 3

1

将您的输出通过管道传输到column -t

$ column -t << END
tom@x.com 10
john@x.com 11
andrew@x.com 12
thomas_sean@x.com 15
END
tom@x.com          10
john@x.com         11
andrew@x.com       12
thomas_sean@x.com  15
于 2013-08-23T11:14:38.317 回答
1

可能的脚本

while read -r user time
do
    printf "%-20s %s\n" "$user" "$time"
done <<'EOF'
tom@x.com 10
john@x.com 11
andrew@x.com 12
thomas_sean@x.com 15
EOF

样本输出:

tom@x.com            10
john@x.com           11
andrew@x.com         12
thomas_sean@x.com    15

如果需要,%-20s可以稍微调整(%-17s%-18s),但基本思想是保留适当数量的空格并左对齐字符串,然后是空格,然后是“时间”。\n换行符是必要的;printf除非您要求,否则不会添加换行符。

于 2013-08-27T03:59:20.480 回答
0

你可以尝试这样的事情:

printf("%-10s%-50s", $1, $2)

我没有测试它,但我认为它会起作用。如果没有,请看一下这个问题,有人解决了同样的问题:)

希望能帮助到你!

于 2013-08-23T10:42:48.377 回答