【问题标题】:Unix C Shell Scripting printf helpUnix C Shell 脚本 printf 帮助
【发布时间】:2010-09-21 00:06:12
【问题描述】:

尝试打印出 2 个正确对齐的不同变量的值列表。

foreach finalList ($correctList $wrongList)
printf "%20s%s\n" $finalList
end

这会将它们打印出来并对齐,但它是一个接一个。我如何让它遍历每个列表中的每个项目,然后转到新行?

我希望它们最终看起来像这样:

Correct    Incorrect
Good1      Bad1
Good2      Bad2
Good3      Bad3

好的来自正确的列表 Bad 来自 wrongList

去掉\n就变成了这样:

Good1     Bad1    Good2    Bad2

我只想要 2 列。

【问题讨论】:

  • 你能给出你想要的布局吗,对每个列表中的项目使用正确的1、正确的2和错误的1错误2等?

标签: unix shell


【解决方案1】:

我相信带有 -m 选项的 pr(1) 命令会帮助你做你想做的事。查看其手册页以消除页眉/拖车选项并设置列宽。

另外,我建议您不要使用 C-Shell 编写脚本;您会发现 sh 语法 shell(sh、bash、ksh 等)更加一致且更易于调试。

【讨论】:

  • 我认为使用 csh 的危险已被充分宣传。每次有人向 csh 寻求帮助时,我们都必须提及它吗?
【解决方案2】:

您可以像这样同时遍历两个列表:

# Get the max index of the smallest list
set maxIndex = $#correctList
if ( $#wrongList < $#correctList ) then
  set maxIndex = $#wrongList
endif

set index = 1
while ($index <= $maxIndex)
  printf "%-20s %s\n" "$correctList[$index]" "$wrongList[$index]"
  @ index++
end

【讨论】:

  • 建议 - 适用于所有使用类似 printf 符号的语言 - 将使用 "%-20s %s\n" (如果第二列通常应该使用 "%-19s %s\n"从第 21 列开始)。这样可以确保两个值之间有空格,即使第一个值超过 20(或 19)个字符。
  • @Jonathan,我接受了你对这个例子的建议,但这并不总是理想的行为。例如,我经常需要编写例程将数据导出为固定宽度的文件格式,其中字段之间不需要空格(插入无关空格会破坏布局)。
【解决方案3】:

尝试摆脱\n

【讨论】:

  • 然后他们就全部打印出来了。它最终成为 Good1 Bad1 Good2 Bad2
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2011-02-18
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多