新手在這裏。我試圖用awk打印一些信息。所以我寫了一個shell腳本爲什麼在awk printf中使用變量不起作用?
#!/bin/bash
turbVar="U"
bcName="outlet"
str="$turbVar $bcName b.c. = "
# method-1
awk -v RS='}' '/'$bcName'/ { printf "%20s = %s\n" $str $4; exit;}' BCFile | tr -d ";"
# method-2
awk -v RS='}' -v var1=$bcName '$0 ~ var1 { printf "%20s = %s\n" $str $4; exit;}' BCFile | tr -d ";"
的BCFile
文件內容
boundary
{
inlet
{
type fixedValue;
value uniform (5 0 0);
}
outlet
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
....
}
我希望輸出像
U outlet b.c. = inletOutlet
可悲的是,這是行不通的。它抱怨awk: (FILENAME=0/U FNR=4) fatal: not enough arguments to satisfy format string %20s = %s
。
爲什麼我不能在awk printf中使用$ str變量?
第二個問題,哪種方法更好?使用'/'$bcName'/
或使用-v var1=$bcName '$0 ~ var1
?,爲什麼我不能直接使用'/$bcName/
或'/"$bcName"/
?強引號和弱引用在這裏有什麼區別?清理應該是
'0/U'是什麼意思? – 2013-04-05 17:48:39
這是一個文件。它的內容顯示在這篇文章中'http:// stackoverflow.com/questions/15825150 /如何找到多行模式匹配 - 他們必須首次匹配' – Daniel 2013-04-05 17:56:13
文件' U'在一個名爲'0'的文件夾中。 :) – Daniel 2013-04-05 17:58:39