新手来了。我正在尝试使用awk打印一些信息。所以我写了一个shell脚本
#!/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"/?这里的强报价和弱报价有什么区别?
发布于 2013-04-06 01:50:41
您清理的代码应该是:
awk -v RS="}" -v v1="$bcName" -v s="$str" '$0~v1{gsub(/;/,"");printf "%s%s\n",s,$4;exit}'
U outlet b.c. = inletOutlet备注:
-v.printf。awk脚本中而不是在shell中执行gsub(/;/,"")然而,这可能不是最好的方法,但我不能说,因为没有提供上下文。
https://stackoverflow.com/questions/15840182
复制相似问题