簡體   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