私はかなり大きなファイルに対して簡単なテキスト操作をしようとすることがよくあります。さまざまな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番目の例は、awk
Perlや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などの高度なツールがより強力であるという理由だけでこれを避けてはいけません。