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