[英]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.