次の行を含むtables.tex(プロローグを含むtex用にフォーマットされた多くのテーブル)というファイルがあるとします。
some words (xyz, abc) & 0.00071 (0.07846) & 0.00411 (-0.13542) \\
some more words (1) & 0.00341 (-0.59991) & 0.00001 (0.99453) \\
二重バックスラッシュで終わる行で、最初の「&」を除く括弧内のすべての数字を見つけて、3桁に丸められた丸いバージョンに置き換える必要があります。したがって、上記の2行の出力は次のようになります。
some words (xyz, abc) & 0.00071 (0.078) & 0.00411 (-0.135) \\
some more words (1) & 0.00341 (-0.600) & 0.00001 (0.995) \\
これを行う最も効率的な方法は何ですか?このサイトでは、さまざまな方法(数値の丸め、括弧内の数字の印刷、awk、perlなど)でこれを行う方法の一部を説明する答えを見つけましたが、すべてを1つにまとめる(実際に動作する)スタイルに苦しんでいます。
ベストアンサー1
AwkまたはPerlはこれに適したツールです。 Perlは正規表現のマッチングに任意のコードを適用できるため、実装が簡単です。
perl -pe '
if (s/^([^&]*&)//) { # if there's a &, then strip the prefix…
print $1; # and print it
s[\((-?[0-9]*\.[0-9]+)\)] # replace decimal numbers in parentheses…
[sprintf("(%.3f)",$&)]eg # …by their rounding
}
'