我是 Unix 实用程序的新手,但尝试学习新东西并尝试将我的简单 ruby 脚本切换到某种 shell 脚本做同样的事情。但我不知道如何处理这项任务。
我需要拆分一个包含几个小对象的大文件。每个对象都以如下行开头:OBJECT Type Number Name
.
当我使用 Ruby 时,我正在遍历文件行,如果我找到了模式,我开始将行转储到文件中。直到我再次找到这种模式。
完成后,我将收到一堆较小的文件,而不是一个大文件。
但是是否可以使用 shell 脚本和 Unix 实用程序来做同样的事情?grep
, sed
... 无需调用perl
, ruby
?
编辑:我正在尝试开发自定义git命令并使用 Windows。所以只有 msysgit 附带的实用程序可供我使用。
创建的对象的文件名模式如下Type-Number.txt
。
更新:感谢@perreal,我提出了以下代码,它可以满足我的要求。希望其他使用 git 的 Dynmaics NAV 开发人员会发现这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"