2015-04-03 60 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

相关问题