2013-05-29 30 views
1
awk -F "|" 'function decToBin(dec) { printf "ibase=10; obase=2; $dec" | bc; } BEGIN {print $3" "$4" "$5" "$6" "$7" "decToBin($8)}' $Input 

其中輸入是文件路徑有awk中使用函數重定向調用錯誤

1|2|1.00|0.46|0.44|1.12|49.88|3 
2|2|1.00|0.45|0.55|1.13|50.12|11 

它正常工作,沒有函數調用,但引入功能decToBin()之後,它給人的錯誤。它提供了錯誤的

awk: fatal: expression for `|' redirection has null string value 

就卡住不知道該怎麼做 請需要幫助

回答

2

myawkscript.awk:

function decToBin(dec) { 
    cmd="echo 'ibase=10; obase=2;" dec ";'|bc"; 
    cmd|getline var 
    return var 
} 

//{print $3" "$4" "$5" "$6" "$7" "decToBin($8)} 

然後

gawk -F"|" -f myawkscript.awk myfile 

給你

1.00 0.46 0.44 1.12 49.88 11 
1.00 0.45 0.55 1.13 50.12 1011 

預期

+0

謝謝Dude!只是讓我知道一件事 gawk -F「|」 -f myscript.awk $ Input> $ Input 爲什麼它不會將輸出重定向到同一個文件? –

+0

因爲你不能將文件重定向到它自己;重定向在命令開始之前截斷目標文件*。所以這個命令會看到一個空的輸入文件。 – Jens

+0

好的,謝謝! 我可以修改myawkscript.awk以獲得1011作爲1 0 1 1 請如果您有任何想法讓我知道... –

1

這可不行。 bc被視爲變量的名稱,而不是命令的名稱(awk不像shell)。由於變量未定義,因此它被視爲空字符串。您必須引用命令名稱:

$ awk 'BEGIN {printf "1+1\n" | "bc"}' /dev/null 
2 

此外,$dec不是dec價值,但場數月值。再次,awk不是shell。什麼您更希望它是這樣的:

$ awk 'BEGIN {dec = 21; printf "%d+%d\n", dec, dec | "bc"}' /dev/null 
42