2012-12-03 87 views
2

我有一個製表符分隔的文件看起來是這樣的:awk和LOG2部門

foo 0 4 

boo 3 2 

blah 4 0 

flah 1 1 

我試圖計算的log 2的兩列的每一行之間。我的問題是與零 師我曾嘗試是這樣的:

cat file.txt | awk -v OFS='\t' '{print $1, log($3/$2)log(2)}' 

時,有一個零作爲分母,則awk將崩潰。我想要做的是某種條件語句,當分母等於0時會打印出「inf」。

我真的不知道該怎麼做? 任何幫助,將不勝感激 感謝

+0

評估前添加一個條件:'貓file.txt的| awk -v OFS ='\ t''{if($ 2!= 0)print $ 1,log($ 3/$ 2)log(2)}'' –

+2

您必須除以log10(2)而不是乘以 – 2013-04-10 15:37:30

回答

2

您可以實現如下(有一些額外的微調):

awk 'BEGIN{OFS="\t"} {if ($2==0) {print $1, "inf"} else {print $1, log($3/$2)log(2)}} file.txt 

說明:

  • if ($2==0) {print $1, "inf"} else {...} - 首先檢查,看是否第二個字段($2)爲零。如果是這樣,請打印$1inf並轉到下一行;否則照常進行。
  • BEGIN{OFS="\t"} - 在awk腳本中設置OFS;主要是偏好的事情。
  • ... file.txt - 當你指定awk作爲參數時,awk可以從文件中讀取;這節省了貓進程的使用。 (見UUCA
+0

。有用!這是其他命令讓我......非常感謝 – user1352084

1
awk -F'\t' '{print $1,($2 ? log($3/$2)log(2) : "inf")}' file.txt