【问题标题】:Bash - Read lines from file with intervalsBash - 从文件中读取行间隔
【发布时间】:2019-10-29 20:23:13
【问题描述】:

我需要每隔一段时间读取文件的所有行。一个函数将对每批行执行一个命令。

行范围示例:

1 - 20
21 - 50
51 - 70
...

我尝试在 forloop 中使用 sed 命令,但范围没有到达文件末尾。例如,一个 125 行的文件最多读取 121 行,缺少行才能到达末尾。

我对 sed 行发表了评论,因为在这个循环中,范围上升到 121,而 COUNT 是 125。

TEXT=`cat wordlist.txt`
COUNT=$( wc -l <<<$TEXT )
for i in $(seq 1 20 $COUNT);
do
echo "$i"
#sed -n "1","${i}p"<<<$TEXT
done

输出:

1
21
41
61
81
101
121

谢谢!

【问题讨论】:

  • 向我们展示您尝试过的代码
  • 我把代码放在帖子里了。谢谢。
  • 范围应该是不同的大小吗?你有两个范围有 20 行,而中间范围有 30 行。

标签: bash shell


【解决方案1】:

快速修复 - 通过在分配给 i 的值的末尾抛出 $COUNT 来确保处理最后一行:

for i in $(seq 1 20 $COUNT) $COUNT;
do
echo "$i"
done

1
21
41
61
81
101
121
125

如果COUNT 恰好与seq 生成的最后一个值相同,那么我们需要添加一些逻辑来跳过第二次;例如,如果COUNT=121,那么我们将要在i=121 时跳过第二次,例如:

# assume COUNT=121

lasti=0
for i in $(seq 1 20 $COUNT) $COUNT;
do
[ $lasti = $COUNT ] && break
echo "$i"
lasti=$i
done

1
21
41
61
81
101
121

【讨论】:

  • 您的回复中有语法错误($COUNT] 没有空格)。
  • forloop 中最后一个 $count 变量是缺少的。谢谢! for i in $(seq 1 $interval $count) $count;
  • 正确;通过在最后抛出$COUNT,我在i 值列表中又添加了一项
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 2022-01-12
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多