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

时间:2017-06-09 22:51:58

标签: command-line text-processing

我正在使用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输出。 您能否告诉我如何修复此代码?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

更好的是,跳过while循环并在awk中执行整个操作:

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