当for循环读取文件中的每个单词时,它如何工作?

时间:2014-05-01 00:52:33

标签: bash scripting

我想翻阅一个文件,一次读两个单词。所以我认为我可以做for循环一次读取一个单词的内容,并不断检查文件。

PS:这是脚本的作用:读取一个有工作时间的文件(开始时间和结束时间,当天可能有更多的一对)并给出该月的总时间。

我想一次读两个单词,以便更容易计算出每天的工作小时数。特别是因为小时输入像12:16而且我必须解析每个小时的小时和分钟

修改 带小时的文本文件如下所示: 8:50 15:60 9:9 13:41 14:23 18:40 10:00 18:00

请注意每个条目之间的间距不一定要精确,以及如何在同一天离开工作并返回的时间超过2次

而且我还没有编写太多的代码,因为我无法弄清楚我将如何编写代码。

2 个答案:

答案 0 :(得分:0)

如果你使用shell内置的单词定义,即除了" $ IFS"之外的每个连续字符串,你可以一次读取一个单词的文件,就像这样:

for word in $(<file); do
  action "$word"
done

要一次操作两个字,您需要累积:

pair=()
for word in $(<file); do
  pair+=("$word")
  if (( ${#pair[@]} % 2 == 0 )); then
    action "${pair[@]}"
    pair=()
  fi
done
# Decide if you want to handle the scenario where there's a final word
# … action "${pair[@]}"

答案 1 :(得分:0)

所有for循环都可以实现为while循环:

WORD_PAIRS=(a b c d e f g h)
COUNT=${#WORD_PAIRS[@]}
i=0
while [[ $i -lt $COUNT ]]
    do
    WORD1=${WORD_PAIRS[$i]}
    WORD2=${WORD_PAIRS[$i + 1]}
    echo $WORD1 $WORD2
    i=$(($i + 2))
done

输出:

a b
c d
e f
g h