2013-04-08 37 views
-3
awk < MigStat.stat -F: '{ if ($a == "load")b=8; } $1 == "D0001" && FNR== '$c' {print $b}' 

現在我想打印列$ b中存在的值,但是在這種情況下它會打印整行。 我希望做的是使用從if語句b的值打印在該列想要在awk命令中使用其中的一個變量

+0

您需要閱讀並理解http://cfajohnson.com/shell/cus-faq-2.html#Q24,然後重試。 – 2013-04-08 14:44:48

回答

2

的值傳遞的價值觀使用-v選項:

awk -F: -v a=2 -v c=10 '$a=="load"{b=8}$1=="D0001"&&FNR==c{print $b}' MigStat 

注:

  • 要傳入變量,請使用awk-v選項。

  • awk讀取文件,您不需要使用重定向。

  • awk的結構是condition{block}

  • awk初始化變量0所以如果b尚未在塊$a=="load"{b=8}設置,那麼{print $b}{print $0}其中$0是整行。

+0

我嘗試了你的方式,但它仍然給出了整行作爲輸出 – 2013-04-09 04:41:55

+0

這意味着條件'$ a ==「加載」'在文件中永遠不會是真的。 – 2013-04-09 07:57:54

1

您不需要重複分配b=8。如果腳本與您在那裏發佈的內容一樣,則根本不需要$b

如果$a, $c是shell變量:

awk -F: -v a="$a" -v c="$c" 'a=="load"&&$1=="D0001"&&NR==c{print $8;exit}' MigStat.stat 

和更完善print $8呼叫exit;停止awk的處理還行。