2016-06-15 29 views
0

我對編程的新,我有一個簡單的疑問,但我並沒有發現其他問題,這個問題的答案...我希望你能幫助我:)用awk打擊NR。如何打印其餘的行?

我有一個文件名爲template.conf,我需要使許多ID.conf文件更改該模板的兩行(24和49)。我有一個想法如何做到這一點:

awk -v Id=${Id} '(NR==24){$3=${Id}".txt"} (NR==49){$3="Input_"${Id}".txt"}' \ 
    template.conf > ${Id}.conf 

但這隻打印行24和49;不是模板文件的其餘部分...

我該如何解決這個問題?

+5

正如所寫,那不會打印任何東西。你必須告訴'awk'來實際打印行。在最後一個'}'後面在引號內加'1'應該是個訣竅。 –

+1

你也不需要'()'。同樣'$ {Id}'是值爲'Id'的字段(可能是一個字符串,所以默認爲0)。 awk中的變量只是'Id'的名字 – 123

+2

在awk中,不用'$'作爲變量的前綴,所以簡單地寫'Id'就會擴展到變量Id的值,例如。 'awk -v Id =「$ id」'{$ 3 = Id} 1''和'$'前綴指的是一個字段,例如:'$ 1'指的是第一個字段的值,或者是動態的:'a = 1; $(a)' – andlrc

回答

1

這awk應該工作。

awk -v Id=${Id} 'NR==24{$3=Id".txt"} NR==49{$3="Input_"Id".txt"}1' \ 
template.conf > ${Id}.conf 

我猜awk行是在bash腳本里面的。在那末尾的1使awk打印所有行。