使用 awk 从文本文件中的数据创建 LaTex 表

使用 awk 从文本文件中的数据创建 LaTex 表

因此,我曾多次使用 awk 在文本文件的每一行中添加或删除文本。我现在想学习如何在多个位置的每行添加一些字符。

这是为了我的乳胶数据表。例如,我可能有一个如下所示的文件:

mass merror velocity verror
1.0 0.1 2.0 0.2
1.5 0.2 1.0 0.2
2.0 0.3 0.5 0.1

现在要将其显示为乳胶中的表格,我需要在列之间添加“&”。我希望它是两列,并用 +/- 符号分隔错误值。每个值还需要处于数学模式。如果您不了解乳胶,请不要担心。我想要的输出代码就是这样:

\(mass \pm \merror\) & \(velocity \pm verror\) \\
\(1.0 \pm 0.1\) & \(2.0 \pm 0.2\) \\
\(1.5 \pm 0.2\) & \(1.0 \pm 0.2\) \\
\(2.0 \pm 0.3\) & \(0.5 \pm 0.1\) \\

所以我希望它在数据的第一列和第三列之前添加“(”,在数据的第二列和第四列之前添加“\pm”,并在第二列和第四列的末尾添加“)”。我已经知道如何在末尾添加 \ 。

答案1

awk '{print "\\("$1" \\pm "$2"\\) & \\("$3" \\pm "$4"\\) \\\\"}'

答案2

awk你在评论中的方式应该是完美的。下面是如何在 Perl 中执行相同的操作:

perl -lane 'print "\\($F[0] \\pm \\$F[1]) & \\(\\$F[2] \\pm \\$F[3]) \\\\"' file 

答案3

#!/bin/bash
read -r -d '' content <<EOF
mass merror velocity verror
1.0 0.1 2.0 0.2
1.5 0.2 1.0 0.2
2.0 0.3 0.5 0.1
EOF

awk -v out='\\(%s \\pm \\%s\\) & \\(%s \\pm %s\\) \\\\\n' \
    '{printf out, $1, $2, $3, $4}' <<<"$content"

输出:

\(mass \pm \merror\) & \(velocity \pm verror\) \\
\(1.0 \pm \0.1\) & \(2.0 \pm 0.2\) \\
\(1.5 \pm \0.2\) & \(1.0 \pm 0.2\) \\
\(2.0 \pm \0.3\) & \(0.5 \pm 0.1\) \\

提供的答案很好,但我个人发现 printf 解决方案更容易处理。

相关内容