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
我正在使用 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