我有一个值列表:
2016-01-04T16-01-56,7
2016-01-04T16-01-57,0
2016-01-04T16-02-49,7
2016-01-04T16-03-15,7
2016-01-04T16-03-42,28
2016-01-04T16-04-37,28
2016-01-04T16-05-03,0
2016-01-04T16-05-28,0
2016-01-04T16-06-21,0
2016-01-04T16-06-46,0
结果我想得到:
Entries1:
BEGIN: 2016-01-04T16-01-56,7
END: 2016-01-04T16-01-56,7
Entries2:
BEGIN: 2016-01-04T16-02-49,7
END: 2016-01-04T16-03-15,7
Entries3:
BEGIN: 2016-01-04T16-03-42,28
END: 2016-01-04T16-04-37,28
有没有人知道实现这一目标的最简单方法?
注意:0值不感兴趣,只有> 0
目前我有一个脚本将所有条目放在数组中并扫描数组中的每个项目。这种方式非常慢,因为有很多“if”语句。
非常感谢任何帮助。
答案 0 :(得分:1)
目前尚不清楚你要做什么,但这可能会解决你的问题。
#!/bin/bash
entry=1
for file in "$@"; do
prev=''
while read -r -s line; do
num="${line##*,}"
if [[ "$num" != "0" && "$prev" == "" ]]; then
prev=$line
elif [[ "$num" != "0" || "$prev" != "" ]]; then
if [[ "$num" == "0" ]]; then
line=$prev
fi
echo "Entries${entry}"
echo "BEGIN: $prev"
echo "END: $line"
entry=$((entry + 1))
prev=''
fi
done < $file
done
产生以下输出:
Entries1
BEGIN: 2016-01-04T16-01-56,7
END: 2016-01-04T16-01-56,7
Entries2
BEGIN: 2016-01-04T16-02-49,7
END: 2016-01-04T16-03-15,7
Entries3
BEGIN: 2016-01-04T16-03-42,28
END: 2016-01-04T16-04-37,28
如果这不是您想要的,请澄清您希望遵循的规则。