在bash中格式化增量变量输出
我遇到了一个相当简单的问题,变量的增量作为连续字符串打印到文件中 下面是代码示例:在bash中格式化增量变量输出,bash,while-loop,Bash,While Loop,我遇到了一个相当简单的问题,变量的增量作为连续字符串打印到文件中 下面是代码示例: #!/usr/bin/bash _SesT=`date +%Y\/%m\/%d\ %H\-%M\-%S` n="0" Execution_IT(){ while read $3 do ((n++)) printf $n done < ExecLog.txt } echo "test" && echo $_SesT pri
#!/usr/bin/bash
_SesT=`date +%Y\/%m\/%d\ %H\-%M\-%S`
n="0"
Execution_IT(){
while read $3
do
((n++))
printf $n
done < ExecLog.txt
}
echo "test" && echo $_SesT
printf "Execution $(Execution_IT) Started $_SesT\r\n" >> ExecLog.txt
。。。而不是:
Execution 1 Started 2016/02/08 19-06-44
Execution 2 Started 2016/02/08 19-06-44
Execution 3 Started 2016/02/08 19-06-45...
这是我在尝试
cut-d
后得到的最有效的版本<代码>awk<代码>sed;甚至对于循环,使用类似C的语法。有一个版本与此非常类似,在读取行时使用,但输出完全相同。任何建议都将不胜感激。您的printf
需要换行:
printf "%d\n" "$n"
或者,或者
echo "$((++n))"
您的printf
需要换行:
printf "%d\n" "$n"
或者,或者
echo "$((++n))"
据我所知,您只需在文件“ExecLog.txt”中打印一行,特别是最后一行
该行只包含文件中的行数和日期。
这样可以做得更好:
Execution Started 2016/02/08 19-06-44
Execution 1 Started 2016/02/08 19-06-44
Execution 12 Started 2016/02/08 19-06-44
Execution 123 Started 2016/02/08 19-06-45
Execution 1234 Started 2016/02/08 19-06-45
Execution 12345 Started 2016/02/08 19-06-45
Execution 123456 Started 2016/02/08 19-06-46...
_logfile="ExecLog.txt"
n="$(wc -l <"$_logfile")" ### count the number of lines in the log file.
_SesT="$(date +%Y\/%m\/%d\ %H\-%M\-%S)" ### get time just before it is used.
echo "test $_SesT $_logfile"
printf "Execution %s Started %s\r\n" "$n" "$_SesT" | tee -a "$_logfile"
\u logfile=“ExecLog.txt”
n=“$(wc-l据我所知,您只在文件“ExecLog.txt”中打印了一行,特别是最后一行被追加
该行只包含文件中的行数和日期。
这样可以做得更好:
Execution Started 2016/02/08 19-06-44
Execution 1 Started 2016/02/08 19-06-44
Execution 12 Started 2016/02/08 19-06-44
Execution 123 Started 2016/02/08 19-06-45
Execution 1234 Started 2016/02/08 19-06-45
Execution 12345 Started 2016/02/08 19-06-45
Execution 123456 Started 2016/02/08 19-06-46...
_logfile="ExecLog.txt"
n="$(wc -l <"$_logfile")" ### count the number of lines in the log file.
_SesT="$(date +%Y\/%m\/%d\ %H\-%M\-%S)" ### get time just before it is used.
echo "test $_SesT $_logfile"
printf "Execution %s Started %s\r\n" "$n" "$_SesT" | tee -a "$_logfile"
\u logfile=“ExecLog.txt”
n=”$(wc-l你在哪里调用Execution\u IT
?什么是Session\u IT
?你的意思是在每一行重新计算日期,还是在脚本开头只重新计算一次?我在底部复制了错误的函数名,这几乎是一样的。现在我调用Execution\u IT。我还想在每一行打印d/t,so是的,应该是这样。顺便说一句,读取$3的有什么用?没有任何变量名作为$3
传递给函数(就像调用函数时,它根本没有参数一样),如果您希望read
在$3
中设置值,那么,它不是这样工作的……但是$3
在bash中并不表示第3列;它只是表示这一点的awk。您在哪里调用执行它
?以及会话
是什么?您的意思是在每行重新计算日期
,或者只在脚本开头一次?我在底部复制了一个错误的func名称,这几乎是一样的。现在我调用了Execution\u IT。我还想在每一行打印d/t,所以是的,这是应该的。顺便说一句,读取$3
?你没有任何变量名作为$3
传递给函数吗(当您调用函数时,它根本没有参数),如果您希望read
在$3
中设置值,那么,它不会这样工作……但是$3
在bash中并不意味着第3列;它只意味着awk。$n
,而不是“$n”
?我们需要字符串拆分和全局扩展吗?(当然,数字IFS值并不常见,但它们可能会出现)。@CharlesDuffy不,我们不需要它们;)我想我们肯定需要在这里拆分字符串。另一件不起作用的事情是这样的:front=${texttext{$back}还回了美元,但那也没发生。有人刚刚向我建议过。@NiU,嗯?“串分裂”,在这种情况下,这意味着如果IFS=0
,而你的$n
是301
,你将在两行不同的地方打印3
和1
,而不是在一行。我无法想象你为什么会想要它。@NiU我想你在这里说的是其他的东西,不,双间接法没有不起作用。$n
,而不是“$n”
?我们需要在这里进行字符串拆分和全局扩展吗?(当然,数字IFS值并不常见,但它们可能会发生)。@CharlesDuffy不,我们不需要在这里;)我想我们肯定需要在这里进行字符串拆分。另一件不起作用的事情是这样的:front=${texttext{$back}还回了美元,但那也没发生。有人刚刚向我建议过。@NiU,嗯?“串分裂”,在这种情况下,这意味着如果IFS=0
,而你的$n
是301
,你将在两行不同的地方打印3
和1
,而不是在一行。我无法想象你为什么会想要它。@NiU我想你在这里说的是其他的东西,不,双间接法没有“不行。这正是我想要实现的。关于你的第一个例子,我从来没有想过使用tee,甚至只是为了测试。第二个例子做得很好,我只是没有足够的技能去考虑。关于多次执行-我避免了这一点,事先用一个条件语句来拒绝执行在正在进行的一个脚本完成之前,我不会使用任何其他脚本,所以这没关系。谢谢你,这正是我想要完成的。关于你的第一个例子,我从来没有想过使用tee,甚至只是为了测试。第二个例子做得很好,我只是没有足够的技能来考虑。关于多次执行-我是avo事先用一个条件语句来拒绝执行任何其他脚本,直到正在进行的脚本完成,这样就可以了。谢谢