标签: printf

一个衬垫用于填充上一个管道命令的输出列(类似于 printf)?

我通常会用printf足够的空白填充每个单元格,以在其各自的列上保持标题位置。

最终,我可以遍历输出的每一行并进行足够的cut调用,以便我对printf每一行进行调用,但这似乎是一种非常低效的处理方式。

有没有一种方法可以将上述输出转换为漂亮的打印格式,而无需多行或多次调用相同的实用程序?

command-line bash printf

5
推荐指数
1
解决办法
1439
查看次数

printf 以及如何在变量及其值之间添加点“...”

我们有以下输出

猫gh.log

 machine              status               
 =============================================================
 connection_ght 400
 pach_po 72
 timeout 311
 ping_agent 119675
 rt_machine 231
 ginco_snmp   14
 .
 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

如何通过使用打印这样的输出 printf

 machine              status               
 =============================================================
 connection_ght..... 400
 pach_po............ 72
 timeout............ 311
 ping_agent......... 119675
 rt_machine......... 231
 ginco_snmp ........ 14
Run Code Online (Sandbox Code Playgroud)

bash awk printf

5
推荐指数
1
解决办法
3362
查看次数

我认为 printf 破坏了终端中的换行符

运行 bash 脚本后,我的(gnome-)终端最终打印了最后一行结束的每一新行(但在下一行)。我认为它printf破坏了东西,因为如果我替换printf为 ,它就可以工作echo。您知道这可能是什么,以及如何在不关闭终端会话的情况下修复它吗?

换行符损坏

出于安全原因,我无法提供脚本。当我有时间时,我会看看是否可以创建一个最小的损坏示例来展示。

ls terminal gnome-terminal newlines printf

5
推荐指数
0
解决办法
2214
查看次数

%c 格式化字符串在 shell 和 C 中显示不同的行为

如果我用 C 写一行非常简单的代码:

printf("Ascii char for %d is %c\n",65,65);
Run Code Online (Sandbox Code Playgroud)

它只是打印A,因为 ascii 值 65 对应于字符A。但是如果我在shell中使用相同的代码并编写命令

printf "Ascii char for %d is %c\n" 65 65
Run Code Online (Sandbox Code Playgroud)

它将输出显示为Ascii char for 65 is 6. 我期待与 C 语言相同的输出,并且在逻辑上它也应该打印与给定的 ascii 代码对应的字符。

为什么在这些情况下它表现出不同的行为?

c printing shell-script ascii printf

5
推荐指数
1
解决办法
112
查看次数

在列输出中用 EPOCH 替换日期

我有一组这样的数据:

user1 1234 01/01/2020
user2 2345 02/02/2020
Run Code Online (Sandbox Code Playgroud)

我需要将第三列(日期)转换为 EPOCH,同时保留用户名和 ID 号。

user1 1234 1577862000
user2 2345 1580626800
Run Code Online (Sandbox Code Playgroud)

我已经能够进行转换和打印,但新日期被附加到新行中。

$awk '{print($1,$2)}; system("date -d "$3" +%s")' data
user1 1234
1577862000
user2 2345
1580626800
Run Code Online (Sandbox Code Playgroud)

如何让新的 EPOCH 日期与第 1 列和第 2 列在同一行?

awk printf

5
推荐指数
2
解决办法
290
查看次数

将 csv 中的许多值四舍五入到小数点后 3 位(printf ?)

我有一个像这样的粘贴命令 paste -d , file1.csv file2.csv file3.csv

file2.csv 包含这样的数字

0.2
0.3339
0.111111
Run Code Online (Sandbox Code Playgroud)

我希望 file2.csv 中的值具有 3 位小数,如下所示:

0.200
0.334
0.111
Run Code Online (Sandbox Code Playgroud)

对于一个值,这是有效的:

printf "%.3f" "0.3339"->0.334

但对于 file2.csv 中的多个值,这不起作用:

paste -d , file1.csv <(printf %s "%.3f" "$(< file2.csv)") file3.csv

也许有一个好的解决方案?

csv printf paste

5
推荐指数
2
解决办法
906
查看次数

如何在shell中的printf中使用参数两次?

printf %s%s one two打印onetwo但我想要oneonetwotwo

我怎样才能做到这一点?

shell zsh printf

5
推荐指数
1
解决办法
627
查看次数

zsh中printf中的千位分隔符

printf一段时间以来,我一直在尝试定义千位分隔符,但我发现 zsh 存在一些问题。

在 bash 中,我可以使用类似的东西:

$ printf "%'d\n" 1234567890
1,234,567,890
Run Code Online (Sandbox Code Playgroud)

但在 zsh 中它不起作用:

$ printf "%'d\n" 1234567890
printf: %': invalid directive
Run Code Online (Sandbox Code Playgroud)

我刚刚发现 coreutilsprintf会做得很好:

$/usr/bin/printf "%'d\n" 1234567890
1,234,567,890
Run Code Online (Sandbox Code Playgroud)

如何在 zsh 中使用千位分隔符?

$ zsh --version
zsh 5.0.2 (x86_64-pc-linux-gnu) 
Run Code Online (Sandbox Code Playgroud)

zsh numeric-data printf

4
推荐指数
2
解决办法
1941
查看次数

bash 防止 printf 中断另一个 printf

我有以下测试脚本。

#!/bin/bash

function foo {
  printf "Test line break: $1\nafter line break\n\n"
}

for VARIABLE in {1..30}
do
  foo $VARIABLE &
done
wait
Run Code Online (Sandbox Code Playgroud)

现在我执行了几次脚本,有时输出看起来像这样:

Test line break: 15
Test line break: 14
after line break: 14
after line break: 15


Test line break: 16
after line break: 16
Run Code Online (Sandbox Code Playgroud)

而不是预期的:

Test line break: 15
after line break: 15

Test line break: 14
after line break: 14

Test line break: 16
after line break: 16
Run Code Online (Sandbox Code Playgroud)

如何防止 printf“中断”另一个 printf,但仍在后台运行它?

对我来说,问题似乎是 printf 中的“\n”。

bash newlines printf

4
推荐指数
1
解决办法
326
查看次数

使用 printf 在 Bash 中精确时间戳(不是一个小问题)

壳牌:猛击。

目标:获取自某个固定时间点以来的时间 t(以毫秒为单位),适用于使用 printf 为内容添加时间戳。

条件:解决方案必须通过多合一文本行测试。

附加:解决方案应该是原子的(是的,对!..),轻量级,将量化和舍入问题保持在最低限度,等等..

t=$[$(date +%s%N)/1000000]<--- 我的解决方案,在这种情况下,固定点是 1970 年 1 月 1 日。但由于两次约会电话,从根本上来说很糟糕。

printf "t=%d\n" $[$(date +%s%N)/1000000] <--- 在这里,使用 printf。

t=$(date +%s)$[10#$(date +%N)/1000000]<--- 可怕的例子。甚至似乎需要取消填充,然后重新填充前导零。

printf "t=%d%03d\n" $(date +%s) $[10#$(date +%N)/1000000] <--- 在这里,使用 printf。

有什么更好的(明智的)建议吗?

编辑(附加):

t=$(date +%s%N)然后printf "%s\n" ${t::13}<--- 我猜,但不是一行。

bash timestamps printf

4
推荐指数
2
解决办法
6516
查看次数