繁体   English   中英

bash脚本无法读取第一行

[英]bash script fails to read first line

我有一个脚本将时间戳转换为秒,所以我最终可以计算平均值。 我注意到输出行的数量不等于输入行的数量。 实际上它似乎没有阅读第一行。 我简化了代码来检查它,但每次都是一样的。

输入文件如下所示:

00:00:01
00:00:02
00:00:03

输出如下:

00 00 02
00 00 03

这是脚本:

#!/bin/bash

while read line
do
    awk -F: '{ print $1, $2, $3 }' > /home/time.log

done < /home/timestamp.log

我确定这是愚蠢的,但我看不到它!

你不需要循环。 你可以简单地使用awk:

awk -F: '{ print $1, $2, $3 }' /home/timestamp.log > /home/time.log

您看到的行为的原因是您没有将该line传递给awk。 所以读取循环读取第一行,并在循环中通过awk休息,因为awk从循环中获取stdin 因此,你没有看到第一行。

如果它仍然不清楚,只需在循环中的awk调用添加一个echo "Hello" ,看看它被打印多少次:)

你可能打算这样做:

echo $line | awk -F: '{ print $1, $2, $3 }' > /home/time.log

但这只是不必要的。

read line消耗输入的第一行,并将其分配给Bash变量$line ,然后忽略该$line 然后循环体正在使用awk处理文件的其余部分。

你可以直接使用awk而不需要循环:

awk -F: '{ print $1, $2, $3 }' /home/timestamp.log > /home/time.log

或者您可以使用循环而不是awk:

while IFS=: read h m s; do echo $h $m $s >> /home/time.log; done < /home/timestamp.log

你也可以在这里使用tr

tr ':' ' ' < /home/timestamp.log

它将提供您需要的字符翻译。 例如:

$ tr ':' ' ' <dat/timestamp.log
00 00 01
00 00 02
00 00 03

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM