while 循环使用 awk 只提供一个结果块

while loop provide just one block of result using awk

我正在使用 awk 处理我的文本文件。我写了下面的代码:

#!/bin/bash
l=1
while [ $l -lt 5 ]
do
echo $l
awk -v L=$l '/^BS[0-5]|^FG[2-7]/ && length<10 {i++}i==L {print}'
l=$(expr $l + 1)
done <input.txt

但是,一旦我 运行 代码,我就得到了第一个 awk 输出。 请告诉我如何修复此代码好吗?

您没有阅读我们文件中的行。做:

while read line && [ $l -lt 5 ]
do
...

while 循环正在从文件 input.txt 中获取输入。 awk 从 while 循环继承其输入,并在循环的第一次迭代中读取所有输入。在第二次迭代中,awk 没有得到任何数据。如果您想在每次迭代时从该文件中读取,请将 input.txt 作为参数传递给 awk.

更好的是,跳过 while 循环并在 awk 中完成所有事情:

awk  '/^BS[0-5]|^FG[2-7]/ && length<10 && i++ < 5' input.txt