2017-06-09 75 views
0

我正在使用awk處理我的文本文件。我寫下面的代碼:while循環只提供了一個使用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

while循環正在從文件input.txt中獲取其輸入。 awk從while循環繼承它的輸入,並且它讀取循環第一次迭代中的所有輸入。在第二次迭代中,awk沒有獲取數據。如果要在每次迭代中讀取該文件,請將input.txt作爲參數傳遞給awk

更重要的是,跳過while循環,做整個事情在AWK:

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

你不讀我們文件的行。請執行以下操作:

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

我不想讀線。我正在選擇一段文字。 – user3275043

+0

好吧,基本上你只想循環5次?爲什麼不做'for'循環呢? – RaphaMex