2017-05-07 50 views
0
awk '{ if (NR -ge $num && NR -le $num_max && $1 == $UM); 
then sed 's/'$UM'/'$UM_lower'/g'dipping_CR_UM_change.txt > new.txt}' 

我收到以下錯誤用awk, 「如果」,那麼sed的

awk: syntax error at source line 1 
context is 
    { if (NR -ge $num && NR -le $num_max && $1 == $UM); then sed >>> s/$UM/$UM_lower/gdipping_CR_UM_change. <<<txt> new.txt} 

awk: illegal statement at source line 1 
+3

awk不是shell,它是一個獨特的工具,具有獨特的語法和範圍。獲取Arnold Robbins編寫的「有效的Awk編程」第4版。 –

+0

埃德莫頓提到的書是免費的: https://www.gnu.org/software/gawk/manual/ –

+0

@RicardoBranco賣這本書是唯一的錢提供GNU awk的人獲得了大量的時間他將GNU awk和文檔放在了一起,我認爲我們都應該推薦人們購買這本書,而不是把它們引用到他已經親切地提供給我們供用戶參考的在線版本中。 –

回答

0

awk中的力量可以傳遞變量並用GSUB()函數使SED部分:

awk -v UM="$UM" -v UM_lower="$UM_lower" -v num="$num" '{ if (NR > num && NR < num_max && $1 == UM) { gsub(UM, UM_lower) } print $0 }' 
+0

謝謝!如果我在awk行之前定義了UM,UM_lower等,是否需要用-v再次定義它們? – Samgi

+0

是的。 -v選項用於傳遞給Awk變量。在這種情況下,我們使用環境變量。 –

+0

awk如何知道要訪問的.txt文件?它沒有在您的聲明中定義? – Samgi