1

私はUnixユーティリティを初めて使用しますが、何か新しいことを学び、単純なrubyスクリプトを同じことを行うある種のシェルスクリプトに切り替えようとしています。しかし、私はこのタスクにアプローチする方法がわかりません。

いくつかの小さなオブジェクトを含む1つの大きなファイルを分割する必要があります。すべてのオブジェクトは、次のような行で始まりますOBJECT Type Number Name

Rubyを使用しているときは、ファイルの行を1つずつ調べていきます。パターンが見つかった場合は、ファイルに行をダンプし始めます。このパターンをもう一度見つけるまで。

終了すると、1つの大きなファイルではなく、小さなファイルをたくさん受け取ります。

しかし、シェルスクリプトとUnixユーティリティを使用して同じことを行うことは可能ですか?grepsed...を呼び出さず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"
4

2 に答える 2

4
awk '{ 
  if (/(OBJECT.*)/) {
    file = OBJECT$2$3$4
    print > file
  } else {
    print >> file
  }
}' input_file
于 2012-07-18T17:00:04.220 に答える
2

'contextsplit'コマンドを探していると思います:csplit

$ csplit filename '/OBJECT/'
于 2012-07-18T15:19:48.020 に答える