2012-06-25 78 views
3

我們可以將NR傳遞給awk中的變量嗎?將NR的值傳遞給AWK中的變量

我有一個腳本這是這樣的:

 awk -v { blah blah.. 
    .......... 
    count-- 
    print count 
    } 
    if (count==0) 
    {print "The end of function" 
    print NR 
    exit 
    } 

這是代碼的AWK一部分。我想將NR傳遞給VAR2爲:

sed -n ''"$var1"','"$var2"'p' 

必須被重複使用多次!

感謝您的回覆。

+0

你爲什麼不在awk腳本中做替換?你爲什麼需要sed? – cdarke

+0

是的,但我無法使用awk中的變量定義範圍:awk'NR> =「var1」&& NR <=「var2」'。 – Gil

+1

是的,你可以:'NR> = var1 && NR <= var2 {...}' – cdarke

回答

3

正如其他人所說,有更好的方法來實現總體目標。

但是,爲了回答您的具體問題:

var2=$(awk 'END {print NR}' inputfile) 

,並添加其他任何你可能需要的AWK腳本中。

+0

正是我在找的東西:)謝謝! – Gil

3

我不知道你想用awksedNR變量來實現。你的意思是文件的行數?

此命令獲取它:

wc -l infile | sed -e 's/ .*$//' 

所以,用它來與-v開關awk並且只要你想使用它。 Next命令將打印10,因爲infile在我的電腦中有十行。

awk -v num_lines=$(wc -l infile | sed -e 's/ .*$//') 'BEGIN { print num_lines }' 
+0

我想要根據條件的awk函數的退出行。打印NR給出的輸出到標準輸出,但不能把它傳遞給變量? – Gil

3

如果您只想打印某一子集的行,那麼您幾乎就是在那裏。 -v標誌是要走的路。

awk -v var1=15 -v var2=25 'NR>=var1 && NR<=var2 {blah blah ...}' 

當然,你必須改變15和25到你需要的東西。注意變量不應被封裝在引號中。

+0

通過bash變量代替15和25它工作正如所料......感謝您的時間:) – Gil