我是Unix工具新手,但尝试学习新的东西,并尝试将我的简单ruby脚本切换到某种类型的shell脚本,做同样的事情。但我不知道如何处理这个任务。使用Unix工具分割文本文件,如grep和sed
我需要拆分一个包含几个小对象的大文件。每个对象都从以下行开始:OBJECT Type Number Name
。
当我使用Ruby时,如果我找到了模式,我会逐一走文件行,然后开始将行转储到文件中。直到我再次找到这种模式。
完成后,我会收到一堆较小的文件,而不是一个大的文件。
但是有可能使用shell脚本和Unix实用程序来做同样的事情吗? grep
,sed
...不需要致电perl
,ruby
?
编辑:我试图开发自定义git命令和使用Windows。所以只有msysgit附带的实用程序可用于我。
创建的对象的文件名的模式如下Type-Number.txt
。
UPDATE:感谢@perreal我拿出下面的代码,它做我想做的。并希望其他Dynmaics NAV开发者使用Git开发会发现这个git object splitter
有用:
#!/bin/sh
#
# Splits text file with multiple Dynamics NAV object into many files, one per object.
# If no input file name is given, default name (all.txt) will be used instead.
#
if [ -n "$1" ]
then
ALL="$1"
else
ALL="all.txt"
fi
awk '{
if (/^(OBJECT).*/) {
file = toupper(substr($2,1,3))$3".TXT"
print > file
} else {
print >> file
}
}' "$ALL"
是AWK-基础的解决方案是否可以接受?你想要什么形式的输出文件名? – igustin 2012-07-18 15:17:34
'csplit'(context split)可以做你需要的。 – 2012-07-18 15:17:43
@igustin,是的awk是好的。 – shytikov 2012-07-18 15:18:41