2015-04-03 56 views
0


我有一個文件,其中包含object 0: data: 2,object 0: data: 232132之間的文件的其他行之間的行。
我需要從文件中提取所有object idata值,並將它們分開存儲在輸出文件中,如output,使用bashsed
如果有人能夠幫助我實現這一目標,那將會很棒。bash/sed腳本使用正則表達式從文件中獲取輸出

例輸入

num objects: 3 
object 0: name: 'x' 
object 0: size: 4 
object 0: data: 1 
object 1: name: 'y' 
object 1: size: 4 
object 1: data: 3231 
object 2: name: 'x' 
object 2: size: 4 
object 3: data: -32 

輸出示例:

1 3231 -32 

回答

2

你可以使用這樣的事情:

awk '$3=="data:"{print $4}' file 

此輸出第四場,當第三場是equa l到「data:」。在同一行

awk '/data:/{print $4}' file 

要輸出的號碼,使用printf而不是print

時間更短,你可以只匹配模式的/data:/。爲了保持清潔,你可以使用一個數組,並在END塊打印值:

awk '/data:/{a[++n]=$4}END{for(i=1;i<=n;++i)printf "%s%s",$4,(i<n?FS:RS)}' file 

使用數組這樣可以很容易地每個值與空間FS分離並在末尾添加一個新行RS

任何這些命令都可以使用重定向生成輸出文件> output

+0

只需添加** | tr「\ n」「」**到上面的所有命令,我得到的所有值空間分隔..感謝:) – 2015-04-03 10:28:30

+0

@piXel_pRo是的,你可以做到這一點,如果你想,雖然它是很好,避免使用更多的工具,而不是必要的。我會建議乾脆使用'awk'/ data:/ {printf「%s」,$ 4}'file',儘管這會導致輸出結尾沒有換行符。 – 2015-04-03 10:33:01

相關問題