我是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