2013-04-04 121 views
0

说我有一个BCFile具有以下内容:如何使用shell脚本读取用户定义的字典?

inlet 
{ 
    type   fixedValue; 
    value   uniform (5 0 0); 
} 
outlet 
{ 
    type   inletOutlet; 
    inletValue  $internalField; 
    value   $internalField; 
} 
.... 
blahblahblah (other boundary condition with the same dictionary format as above) 

为了打印出的outlet边界条件类型,即inletOutlet,我以为我可以使用,

cat BCFile | grep "type" | awk '{printf $2}' | tr -d ";" 

但问题现在在使用grep有太多type关键字出现。那么有没有办法先检测outlet这个词,然后搜索并grep {}之间的内容?谢谢!

回答

1

AWK如何是非常强大的。例如,如果将记录分隔符设置为},则每个块将成为其自己的记录。然后你只需要打印相应的记录:

$ awk -v RS='}' '/outlet/ { print $0 }' file 
outlet 
{ 
    type   inletOutlet; 
    inletValue  $internalField; 
    value   $internalField; 
+0

但是如果是'入口',因为关键字'入口'会出现很多次。此方法将不再起作用。 ( – Daniel 2013-04-05 03:07:35

+0

有多种方法可以做到这一点:你可以将匹配条件从'/ outlet /'改为'/入口\ n {/',或者$ 1〜/入口/'或者'/ ^入口/ – Joni 2013-04-05 07:35:43

0

grep -A 5 'outlet' BCFile | grep 'type' | awk '{printf $2}' | tr -d ";"