标签: printf

在 bash-shell 中使用 printf 的 i/o 格式

我正在尝试使用 printf 输出我的 shell 脚本的结果。为了保持列中的结果对齐,我使用选项卡作为:

printf "%s\t %s\t %s\t %s\t %s\t %s\t %s\n" $i $est $var_m $jk $mst $var_M  $Tes >>tmp
Run Code Online (Sandbox Code Playgroud)

但问题是,在某些情况下,结果有点长,比如输出,

var_M=`echo "scale=8;(-1/$jk + (e(2*$jk)+1)/(e(2*$jk)-1))"|bc -l `
Run Code Online (Sandbox Code Playgroud)

所以,如果我可以格式化打印到列,对我来说会更好,比如:

printf "%s *goto column 20* %s *go to column 30* " $i $est >>tmp
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我已经检查了这个线程和手册页,但没有找到它。这可能吗?

注意:我没有任何特别的理由坚持使用 printf。因此,也欢迎任何其他可以(轻松)完成此操作的合适命令。

编辑:尝试过:printf "%-2s %-8s\n" $i $est >>tmp 这显然不工作:

4.0 0.17169E-02
5. 0.17156E-02
10. 0.17129E-02
Run Code Online (Sandbox Code Playgroud)

(第二行/第二列没有对齐,就像列表格式输出的情况一样)

shell bash columns printf

3
推荐指数
1
解决办法
7384
查看次数

printf 输出运行到下一行

我在vi. 我的输出运行到它下面的行中。我是 UNIX 的新手,所以我正在努力学习。我的输出使用printf.

printf "%-15s %15s %15s %2d\n %2s " $name $days $phone $start $time
Run Code Online (Sandbox Code Playgroud)

例如,输出看起来像这样

name       days       phone      start 

time name    days       phone      start

time name    days       phone      start 

etc...
Run Code Online (Sandbox Code Playgroud)

如何让我的所有五个变量都打印在同一行上?

printf bash-script

3
推荐指数
1
解决办法
2242
查看次数

如何使用 printf 显示计算结果?

我的程序是

#!/bin/sh
printf 'Please enter salary amount: '
read salary
TAX="echo $salary * 0.15 | bc"
NET="echo $salary + $TAX | bc"

printf "Net Salary= %.2f" $NET
printf "\n"
Run Code Online (Sandbox Code Playgroud)

但是无论我尝试什么,我都无法得到我期望的输出。现在我得到

$ . 3_net_salary.sh 
Please enter salary amount: 300
-bash: printf: echo: invalid number
-bash: printf: +: invalid number
-bash: printf: echo: invalid number
-bash: printf: 1_simple.awk: invalid number
-bash: printf: 1_simple_awk.sh: invalid number
-bash: printf: 2_simple_awk.sh: invalid number
-bash: printf: 2_simple_before.awk: invalid number
-bash: printf: 3_net_salary.sh: invalid number
-bash: printf: …
Run Code Online (Sandbox Code Playgroud)

shell-script printf

3
推荐指数
1
解决办法
7251
查看次数

如何在 bash 中使用多字符分隔符进行数组扩展?

我将问题简化为(我相信)最简单的情况。假设我有一个myscript.sh包含以下内容的脚本:

#!/bin/bash
IFS='%20'
echo "$*"
Run Code Online (Sandbox Code Playgroud)

如果我按如下方式运行命令,输出将如下所示:

me@myhost ~ $ ./myscript.sh fee fi fo fum
fee%fi%fo%fum
Run Code Online (Sandbox Code Playgroud)

这是预期的行为,如bash手册页中所述:

   *      Expands  to  the positional parameters, starting from one.  When
          the expansion occurs within double quotes, it expands to a  sin-
          gle word with the value of each parameter separated by the first
          character of the IFS special variable.  That is, "$*" is equiva-
          lent to "$1c$2c...", where c is the first character of the value
          of the IFS variable. …
Run Code Online (Sandbox Code Playgroud)

bash shell-script echo printf

3
推荐指数
1
解决办法
6032
查看次数

具有多个由空格分隔的参数的 printf 如何工作

我有以下printf功能:

$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt | git mktree
Run Code Online (Sandbox Code Playgroud)

谁能解释一下它产生了什么以及为什么?我希望%s每个参数字符串都有相同数量的格式选项,但我这里有更多的参数字符串。

shell printf

3
推荐指数
1
解决办法
8290
查看次数

向用户输入添加前导零,但正在使用 printf 进行转换

我目前正在寻找以下代码的替代方案,该代码的工作方式不那么“不稳定”。

printf "Please enter the ticket number:\t"; read vTICKET; vTICKET=$(printf %04d "$vTICKET"); printf "$vTICKET\n";
Run Code Online (Sandbox Code Playgroud)

如果我输入072作为输入,这就是我看到的

Please enter the ticket number: 072
0058
Run Code Online (Sandbox Code Playgroud)

我想知道是否有另一种方法可以让我对输入或read命令更加宽容?printf似乎是在不实际测试字符串长度的情况下添加前导零的酷方法。

bash input shell-script numeric-data printf

3
推荐指数
1
解决办法
391
查看次数

按编号顺序将一行值转换为多行

以下变量包括例如这个值

echo $SERVERS


server1,server2,server3,server4,server5
Run Code Online (Sandbox Code Playgroud)

当我想在不同的线路上用管道输送它们时,我会执行以下操作

echo $SERVERS | tr ',' '\n'

server1
server2
server3
server4
server5
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一个管道( echo $SERVERS | tr ',' '\n' | ..... ),以打印以下预期结果

1  ………………  server1
2  ………………… server2
3  ………………… server3
4  ………………… server4
5  ………………… server5
6  ………………  server6
7  ………………… server7
8  ………………… server8
9  ………………… server9
10 ………………… server10
11 ………………… server11
12 ………………… server12
Run Code Online (Sandbox Code Playgroud)

不知道怎么做,但可能与nc命令 os 类似

有什么建议吗?

bash sed awk printf nc

3
推荐指数
1
解决办法
1046
查看次数

尝试使用 printf 解码作为参数传入的 unicode 字符

我正在尝试打印一些像这样输入的 unicode 代码

echo 0024 0025 | xargs -n1 echo # one code per line
  | xargs printf '\u%s\n'
Run Code Online (Sandbox Code Playgroud)

希望得到这个

$
%
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的

printf: missing hexadecimal number in escape
Run Code Online (Sandbox Code Playgroud)

经过一些试验和错误,我实际上有两个较小的问题,一种是有道理的,另一种似乎完全是个谜。


问题1:

echo 0024 0025 | xargs -n1 echo # one code per line
  | xargs printf '\u%s\n'
Run Code Online (Sandbox Code Playgroud)

给我这个

-bash: printf: missing unicode digit for \u
\u0024
-bash: printf: missing unicode digit for \u
\u0025
Run Code Online (Sandbox Code Playgroud)

问题2:

$
%
Run Code Online (Sandbox Code Playgroud)

(使用>for$以便您可以$在输出中看到)

出于某种原因,有些字符适用于 exe 版本,但有些字符即使使用内置 printf 也适用。


所以这里有一个解决方法,如果不是问题#2,它会起作用(但可能比我原来的想法慢很多) …

bash unicode printf

3
推荐指数
1
解决办法
841
查看次数

printf 带引号的字符串

我正在尝试在 bash 中创建一个表 - 我已将所有标题收集到一个 var 中 - 但是当我打印这些包含在 "'s 中的字符串时,这些字符串被视为新列,而不是 printf 命令

当我直接传递相同的值时,它工作正常,但是当我使用 $var 时,我得到了不同的行为。

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values'
$ echo $values
"some spaced words" other values
$ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

Run Code Online (Sandbox Code Playgroud)

我显然误解了我的变量如何不同< some string >,因此导致不同的行为。

使用变量时如何获得与输出 1 匹配的输出?

编辑:我可以看到 var 版本有引号 - 有没有办法将带引号的字符串作为变量传递给 printf ?

bash printf

3
推荐指数
1
解决办法
149
查看次数

为什么在“dash”下执行 printf 字节格式化会失败?

零的 ASCII 十六进制代码是 0x30。因此,您可以通过执行 打印零printf '\x30',它会打印零。

如果将其放入名为 myScript.sh 的 shell 脚本中,然后执行./myScript.sh,它也会打印一个零。

但是,如果您执行sh -c printf '\x30'或 ,sh myScript.sh,您将获得文字字符“\x30”,而不是将其解释为单个字节。

这是为什么?

(已在多台机器上观察到行为,我认为所有这些机器都在运行 bash)。

shell bash dash printf

3
推荐指数
2
解决办法
187
查看次数

标签 统计

printf ×10

bash ×7

shell ×3

shell-script ×3

awk ×1

bash-script ×1

columns ×1

dash ×1

echo ×1

input ×1

nc ×1

numeric-data ×1

sed ×1

unicode ×1