バッチテキスト修正スクリプトの作成

バッチテキスト修正スクリプトの作成

私はかなり大きなファイルに対して簡単なテキスト操作をしようとすることがよくあります。さまざまなUnixテキスト修正ツールの1つを使用してスクリプトを作成する方法があるはずですが、正確にはどうなるかわかりません。

具体的な例として、次のようなソースコードがあるとします。

foo1 = undefined
foo2 = undefined
foo3 = foobar 7
foo4 = undefined

私はこれを次のように変更したいと思います:

foo1 = error "foo1"
foo2 = error "foo2"
foo3 = foobar 7
foo4 = error "foo4"

それ良いこの移行を自動化する方法は明らかです。きっと簡単にできると思います。プログラムを書く実際のプログラミング言語ですが、これを行うことができるいくつかのコマンドラインツールがあります。 (?)

もっと複雑な例として、どうすればいいですか?

foo=ABC
bar=DEF
baz=GHI
foo=123
bar=456
baz=789

入力する

Magic(ABC, DEF, GHI);
Magic(123, 456, 789);

より一般的には、これらの変換を実行するにはどのツールを使用する必要がありますか?それがsed、それともawk、それとも…?

ベストアンサー1

具体的な状況によって異なります。最初の例は、またはを使用してsed解決できますawk。たとえば、次のようにしますawk

$ awk '
/undefined/ {printf "%s = error \"%s\"\n", $1, $1; next}
{print}
' input

次を生成します。

foo1 = error "foo1"
foo2 = error "foo2"
foo3 = foobar 7
foo4 = error "foo4"

または以下を使用してくださいsed

sed '
  /undefined/ s/\([^ ]*\) =.*/\1 = error "\1"/
' input

2番目の例は、awkPerlやPythonなどの高度な言語を使用すると簡単に実行できます。繰り返しますがawk

awk '
{
    split($0, parts, "=")
    items[i++] = parts[2]
}
i%3 == 0 {
    printf "Magic(%s, %s, %s)\n", items[0], items[1], items[2]
    i=0
}

' input

次を生成します。

Magic(ABC, DEF, GHI)
Magic(123, 456, 789)

もっと一般的に言えば…一般的な答えを出すことができるかもしれません。これは、実際に達成したい特定のタスクによって異なります。いったん出たらawkプログラムを書く実際のプログラミング言語したがって、Perl、Python、Rubyなどの高度なツールがより強力であるという理由だけでこれを避けてはいけません。

おすすめ記事